1

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

4

2 回答 2

2

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

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

于 2013-04-09T05:21:12.653 回答
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 读取实时流(如果输入格式可以与实时流转换一起使用)。

于 2014-03-05T07:06:27.333 回答