带管道的FFmpeg-如何定期从C#中的实时流中获取实时帧?

带管道的FFmpeg-如何定期从C#中的实时流中获取实时帧?,c#,ffmpeg,pipe,C#,Ffmpeg,Pipe,我是FFmpeg和C的新手,我想用IP摄像头抓取帧进行图像处理 我制作了下面的C#类,我可以从IP摄像头获得一个单帧 类FFmpegHandler { 公共进程ffmpeg=新进程(); 公众形象; 公共映像初始化() { ffmpeg=新进程() { StartInfo= { FileName=@“/ffmpeg/ffmpeg.exe”, //Arguments=“-i”http://admin:@192.168.10.1/videostream.asf-an-f image2pipe-pre

我是FFmpeg和C的新手,我想用IP摄像头抓取帧进行图像处理

我制作了下面的C#类,我可以从IP摄像头获得一个单帧

类FFmpegHandler
{
公共进程ffmpeg=新进程();
公众形象;
公共映像初始化()
{
ffmpeg=新进程()
{
StartInfo=
{
FileName=@“/ffmpeg/ffmpeg.exe”,
//Arguments=“-i”http://admin:@192.168.10.1/videostream.asf-an-f image2pipe-preset ultrafast-tune zerolatency-s 320x240管道:1“,//挂起
Arguments=“-i”http://admin:@192.168.10.1/videostream.asf-vframes 1-an-f image2pipe-preset ultrafast-tune zerolatency-s 320x240管道:1“,
UseShellExecute=false,
重定向标准输出=真,
RedirectStandardError=true,
CreateNoWindow=true,
WorkingDirectory=“./ffmpeg/”
}
};
ffmpeg.EnableRaisingEvents=true;
ffmpeg.Start();
var stream=ffmpeg.StandardOutput.BaseStream;
var img=Image.FromStream(stream);
//ffmpeg.WaitForExit();
返回img;
}
}   
问题是我想在请求时获取实时(最新)图像

如果我运行FFmpegHandler.init(),则需要2秒钟才能获得延迟的图像输出

我已尝试删除参数-vframes 1,然后它将在image=image.FromStream(stream)之后挂起

当我直接检查ffmpeg输出时,看起来ffmpeg正在继续构建流

frame=    6 fps=0.0 q=2.2 size=      25kB time=00:00:00.24 bitrate= 861.9kbits/s dup=4 drop=0 speed=0.435x    
frame=   65 fps= 60 q=24.8 size=     140kB time=00:00:02.60 bitrate= 440.9kbits/s dup=4 drop=0 speed=2.41x    
frame=   77 fps= 49 q=24.8 size=     161kB time=00:00:03.08 bitrate= 428.0kbits/s dup=4 drop=0 speed=1.95x    
frame=   89 fps= 43 q=24.8 size=     182kB time=00:00:03.56 bitrate= 418.6kbits/s dup=4 drop=0 speed= 1.7x    
frame=  102 fps= 39 q=24.8 size=     205kB time=00:00:04.08 bitrate= 410.7kbits/s dup=4 drop=0 speed=1.57x    
frame=  116 fps= 37 q=24.8 size=     229kB time=00:00:04.64 bitrate= 404.2kbits/s dup=4 drop=0 speed=1.49x    
frame=  128 fps= 35 q=24.8 size=     250kB time=00:00:05.12 bitrate= 399.8kbits/s dup=4 drop=0 speed=1.41x    
frame=  142 fps= 34 q=24.8 size=     274kB time=00:00:05.68 bitrate= 395.7kbits/s dup=4 drop=0 speed=1.36x    
frame=  156 fps= 33 q=24.8 size=     299kB time=00:00:06.24 bitrate= 392.3kbits/s dup=4 drop=0 speed=1.32x    
frame=  169 fps= 32 q=24.8 size=     322kB time=00:00:06.76 bitrate= 389.7kbits/s dup=4 drop=0 speed=1.29x    
frame=  182 fps= 32 q=24.8 size=     344kB time=00:00:07.28 bitrate= 387.4kbits/s dup=4 drop=0 speed=1.26x    
frame=  195 fps= 31 q=24.8 size=     367kB time=00:00:07.80 bitrate= 385.5kbits/s dup=4 drop=0 speed=1.24x    
frame=  208 fps= 31 q=24.8 size=     390kB time=00:00:08.32 bitrate= 383.8kbits/s dup=4 drop=0 speed=1.22x    
frame=  221 fps= 30 q=24.8 size=     413kB time=00:00:08.84 bitrate= 382.3kbits/s dup=4 drop=0 speed=1.21x   

如何从这张直播图像中获取最新帧?(或者有没有线程安全的方法来清理流并在我请求时只获取最新的帧?

最后,我找到了一个使用名为

FFmpeg.AutoGen

参考他们进行流解码的示例

FFmpeg.AutoGen.Example>program.cs

私有静态不安全void DecodeAllFramesToImages(AVHWDeviceType HWDevice){…}
这使我几乎可以实时访问每个输入帧