C# 使用 NReco FFMpegConverter 拍摄实时视频截图

本文关键字:实时视频 使用 NReco FFMpegConverter | 更新日期: 2023-09-27 18:30:34

我有一个作为 Azure Web 角色运行的应用程序,我想在其中截取 Wowza 服务器上实时 RTSP 视频流的屏幕截图。 我正在使用 NReco FFMpegConverter 包装器。 我在一致性方面遇到了问题。 有时代码根本不执行,有时它会立即执行,有时创建屏幕截图需要 2-3 分钟。 我已经在静态(非实时)mp4 视频上对此进行了测试,并且一切都完美执行(在 1-2 秒内)。

Stream thumb1 = new System.IO.MemoryStream();
var ffMpeg = new NReco.VideoConverter.FFMpegConverter();                
ffMpeg.GetVideoThumbnail("rtsp://99.99.99.99:1935/streamurl", thumb1);
//Code to upload file to blob storage
blob = testContainer.GetBlockBlobReference("test.jpg");
thumb1.Seek(0, SeekOrigin.Begin);
blob.Properties.ContentType = "image/jpg";
blob.UploadFromStream(s);

我在执行失败期间收到的错误是"输出文件 #0 不包含任何流"。 我真的很好奇为什么有时需要 2-3 分钟才能获得输出屏幕截图,而有时只需要几秒钟。 寻找有关如何改进此方法并仍然使用 C# NReco 包装器的任何建议。

谢谢!

C# 使用 NReco FFMpegConverter 拍摄实时视频截图

似乎您正在尝试从实时流中获取缩略图,并且 GetVideoThumbnail 方法等待输入以提取视频流的第一帧。也许你的实时流很难从 Azure WebRole 实例访问(甚至根本不可用)。VideoConverter 内部使用 ffmpeg,您可以通过连接到远程桌面的 WebRole 实例并从命令行执行 ffmpeg 来检查它的性能:

ffmpeg -i rtsp://99.99.99.99:1935/streamurl -vframes 1 -r 1 -t 1 -f mjpeg thumb.jpg