Я новичок в FFmpeg и C# и хочу, чтобы для обработки изображений с помощью IP-камеры использовались захваты кадров.
Я создал следующий класс C# и могу получить один кадр с IP-камеры .
class FFmpegHandler
{
public Process ffmpeg = new Process();
public Image image;
public Image init()
{
ffmpeg = new Process()
{
StartInfo =
{
FileName = @"./ffmpeg/ffmpeg.exe",
//Arguments = "-i http://admin:@192.168.10.1/videostream.asf -an -f image2pipe -preset ultrafast -tune zerolatency -s 320x240 pipe:1", // Hangs
Arguments = "-i http://admin:@192.168.10.1/videostream.asf -vframes 1 -an -f image2pipe -preset ultrafast -tune zerolatency -s 320x240 pipe:1",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
WorkingDirectory = "./ffmpeg/"
}
};
ffmpeg.EnableRaisingEvents = true;
ffmpeg.Start();
var stream = ffmpeg.StandardOutput.BaseStream;
var img = Image.FromStream(stream);
//ffmpeg.WaitForExit();
return 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
Как я могу извлечь последние кадры из этого изображения живого потока ? (ИЛИ есть ли потокобезопасный способ очистки потока и получения только последнего кадра при запросе?)