从C#中的视频流中获取图像

时间:2013-04-08 14:20:00

标签: c# .net image video stream

我试图从流中获取图像(MemoryStream更精确)。我找不到可以解决我的问题的微软的任何东西。 我从SQL获取我的流,所以如果有某种方法可以从那里获取图像,那就没问题了。 我检查了ffmpeg,问题是我需要保存视频文件。这些文件最高可达2GB,如果有办法不写入磁盘,则会有所帮助。如果有一种方法只能读取前10MB或其他有限的大小并从中读取图像,那么这也是一种解决方案。

2 个答案:

答案 0 :(得分:2)

视频馈送可以像原始未压缩视频帧一样简单到更复杂的多路复用文件格式兼容的数据块,例如, .MP4文件。虽然前一种情况可能非常简单,但后者需要您解复用文件,在流内搜索,开始解码,可能跳过几帧,然后抓住感兴趣的帧。关键是它可能不像看起来那么简单。

Windows中的视频处理API是DirectShow,Media Foundation。使用DirectShow,可以在SQL支持的数据流之上创建自定义数据源,并从那里按需获取数据库数据,使用API​​接口组件(库存和第三方)完成剩余的任务。

答案 1 :(得分:1)

可以捕获具有免费VideoConverter for .NET的帧,它实际上是FFMpeg工具的包装器。想法是使用VideoConverter的实时流功能(到C#Stream)获取特殊的FFMpeg格式“rawvideo”,它实际上是可以由C#程序处理的位图流,类似:

var videoConv = new FFMpegConverter();
var ffMpegTask = videoConv.ConvertLiveMedia(
    "input.mp4",
    null, // autodetect live stream format
    rawBmpOutputStream,  // this is your special stream that will capture bitmaps
    "rawvideo",
    new ConvertSettings() {
        VideoFrameSize = "320x200",  // lets resize to exact frame size
        CustomOutputArgs = " -pix_fmt bgr24 ", // windows bitmap pixel format
        VideoFrameRate = 5, // lets consume 5 frames per second
        MaxDuration = 5 // lets consume live stream for first 5 seconds
    });

VideoConverter可以从另一个.NET Stream中读取实时流(如果输入格式可以与实时流转换一起使用)。