我没有使用 NamedPipes 就解决了这个问题。方法如下:
注意:此解决方案仅适用于 Linux。
首先创建一个 bash 脚本VideoStreamRecv.bash。 $1 是 WindowID 的参数,我们将把 WinForm 面板 ID 传递给这个 bash 脚本。
#!/bin/bash -e
nc 127.0.0.1 5000 | mplayer -nosound -fps 120 -demuxer h264es -cache 1024 -wid $1 -
注意:写摄像头连接的树莓派的IP代替127.0.0.1。
创建您的 C# 项目。我在 Visual Studio 中创建了一个简单的 Windows 窗体应用程序项目。这是整体外观。
以下是课程:
Base.cs
public partial class Base : Form
{
private MPlayer Player;
private StreamWriter PlayerInput;
public Base()
{
InitializeComponent();
}
private void Base_Load(object sender, EventArgs e)
{
Player = new MPlayer((int)Video.Handle);
Player.Start();
}
private void Stop_Click(object sender, EventArgs e)
{
Player.End();
}
}
MPlayer.cs
类似于@CoreMeltdown,但这里我们调用的是 bash 脚本并关闭 mplayer 子进程,我们在 End 函数中调用 pkill。
class MPlayer
{
Process mplayer;
public MPlayer(int PanelID)
{
mplayer = new Process();
mplayer.StartInfo.UseShellExecute = false;
mplayer.StartInfo.RedirectStandardInput = true;
mplayer.StartInfo.FileName = "VideoStreamRecv.bash";
mplayer.StartInfo.Arguments = PanelID.ToString();
}
public void Start()
{
mplayer.Start();
}
public void End()
{
mplayer.Kill();
Process.Start("pkill mplayer");
}
}
编译项目并将所有二进制文件和VideoStreamRecv.bash复制到与二进制文件相同的目录到Raspberry Pi中。
使用以下命令为 Raspberry Pi 安装单声道:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF
echo "deb http://download.mono-project.com/repo/debian raspbianstretch main" | sudo tee /etc/apt/sources.list.d/mono-official.list
sudo apt-get update
sudo apt-get install mono-devel --yes --allow-unauthenticated
使用此命令(与@CoreMeltdown 相同)在连接相机的 Raspberry Pi 上启动相机流。
raspivid --width 400 --height 300 -t 9999999 --framerate 25 --output - | nc -l 5000
在接收器 Raspberry Pi(带有已编译二进制文件的那个)上,打开终端,使用二进制文件转到目录并执行:
mono MplayerFrontEnd.exe # MplayerFrontEnd is the name of my project, use your own name here.
这是它的样子:
开发愉快:D