我有一个作为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包装器。
谢谢!
答案 0 :(得分:1)
您似乎正在尝试从实时流中获取缩略图,而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