繁体   English   中英

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

[英]get image from video stream in C#

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

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

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

可以使用免费的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中读取实时流(如果输入格式可以用于实时流转换)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM