Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows命名管道到EmguCV VideoCapture_C#_Windows_Pipe_Emgucv_Named Pipes - Fatal编程技术网

C# Windows命名管道到EmguCV VideoCapture

C# Windows命名管道到EmguCV VideoCapture,c#,windows,pipe,emgucv,named-pipes,C#,Windows,Pipe,Emgucv,Named Pipes,我想用emguCV在C中显示h264视频流。我使用netcat从树莓pi发送流,如果我使用netcat+vcl我可以看到流,但不能从c#程序看到流(我是emgucv新手) 引发异常:Emgu.CV.World.dll中的“Emgu.CV.Util.CvException” [错误:0]全局D:\bb\cv\u x86\build\opencv\modules\videoio\src\cap.cpp (122)CV::视频捕获::开放视频(CVIO图像):提出了未知的C++ 例外 编辑1:现在我尝

我想用emguCVC中显示h264视频流。我使用netcat从树莓pi发送流,如果我使用netcat+vcl我可以看到流,但不能从c#程序看到流(我是emgucv新手)

引发异常:Emgu.CV.World.dll中的“Emgu.CV.Util.CvException”

[错误:0]全局D:\bb\cv\u x86\build\opencv\modules\videoio\src\cap.cpp (122)CV::视频捕获::开放视频(CVIO图像):提出了未知的C++ 例外

编辑1:现在我尝试使用FFMPEG从管道中获取位图帧


编辑2:FFMPEG工作正常,但我的延迟约为4000毫秒。

Mencoder解决方案延迟:200毫秒~, 甚至更少的延迟将mplayer gpu acc.窗口合并到表单中。 windows Mplayer和Mencoder生成:

(在客户端上将fps设置得更高会自动修复延迟(使用Mplayer和Mencoder))

树莓PI命令:

raspivid -t 0 -n -o - -fl -md 4 -w 1296 -h 972 -fps 30 -ih | nc -u 192.168.137.1 5000
C#:

Process ncat=新流程();
ncat.StartInfo.FileName=“ncat\\ncat.exe”;
ncat.StartInfo.Arguments=“-u-l 5000”;
ncat.StartInfo.UseShellExecute=false;
ncat.StartInfo.CreateNoWindow=true;
ncat.StartInfo.RedirectStandardOutput=true;
ncat.Start();
进程mencoder=新进程();
mencoder.StartInfo.FileName=“mplayer\\mencoder.exe”;
mencoder.StartInfo.Arguments=“-fps 60-nosound--ofps 30-ovc raw-of rawvideo-vf format=bgr24-really quiet-o-”;
mencoder.StartInfo.UseShellExecute=false;
mencoder.StartInfo.CreateNoWindow=true;
mencoder.StartInfo.RedirectStandardInput=true;
mencoder.StartInfo.RedirectStandardOutput=true;
mencoder.Start();
ncat.StandardOutput.BaseStream.CopyToAsync(mencoder.StandardInput.BaseStream);
字节[]原始=新字节[1296*972*3];
字节[,]rawEmgu=新字节[9721296,3];
while(true)
{
mencoder.StandardOutput.BaseStream.Flush();
mencoder.StandardOutput.BaseStream.Read(原始,01296*972*3);
int n=0;
对于(int y=0;y<972;y++)
{
对于(int x=0;x<1296;x++)
{
rawEmgu[y,x,0]=原始[n++];
rawEmgu[y,x,1]=原始[n++];
rawEmgu[y,x,2]=原始[n++];
}
}
imageBox1.Image=新图像(rawEmgu);
}
raspivid -t 0 -n -o - -fl -md 4 -w 1296 -h 972 -fps 30 -ih | nc -u 192.168.137.1 5000
Process ncat = new Process();
ncat.StartInfo.FileName = "ncat\\ncat.exe";
ncat.StartInfo.Arguments = "-u -l 5000";
ncat.StartInfo.UseShellExecute = false;
ncat.StartInfo.CreateNoWindow = true;
ncat.StartInfo.RedirectStandardOutput = true;
ncat.Start();

Process mencoder = new Process();
mencoder.StartInfo.FileName = "mplayer\\mencoder.exe";
mencoder.StartInfo.Arguments = "-fps 60 -nosound - -ofps 30 -ovc raw -of rawvideo -vf format=bgr24 -really-quiet -o -";
mencoder.StartInfo.UseShellExecute = false;
mencoder.StartInfo.CreateNoWindow = true;
mencoder.StartInfo.RedirectStandardInput = true;
mencoder.StartInfo.RedirectStandardOutput = true;
mencoder.Start();

ncat.StandardOutput.BaseStream.CopyToAsync(mencoder.StandardInput.BaseStream);

byte[] raw = new byte[1296 * 972 * 3];
byte[,,] rawEmgu = new byte[972, 1296, 3];

while (true)
{
    mencoder.StandardOutput.BaseStream.Flush();
    mencoder.StandardOutput.BaseStream.Read(raw, 0, 1296 * 972 * 3);

    int n = 0;
    for (int y = 0; y < 972; y++)
    {
        for (int x = 0; x < 1296; x++)
        {
            rawEmgu[y, x, 0] = raw[n++];
            rawEmgu[y, x, 1] = raw[n++];
            rawEmgu[y, x, 2] = raw[n++];
        }
    }

    imageBox1.Image = new Image<Bgr, Byte>(rawEmgu);
}