2013-04-08 61 views
0

我想从流中获取图像(MemoryStream更加精确)。我找不到任何可以解决我的问题的Microsoft。 我正在从SQL获取流,所以如果有某种方法可以从那里获取图像,那么就可以。 我检查过ffmpeg,问题是我需要保存视频文件。这些文件可以达到2GB,如果有方法不写入磁盘,这将是有益的。如果有办法只读取前10MB或其他有限大小并从中读取图像,那也可以是解决方案。从C#中的视频流中获取图像

+0

视频不过是图像帧的集合(例如,采用Kinect彩色图像流)。鉴于图像大小,像素格式和起始位置,将其分割成片并不困难。从你的观点来看,这是否有意义? – David 2013-04-08 14:27:20

+0

感谢您的回答。但我仍然不知道如何从流中获取单个图像。有一些我可以使用的图书馆吗? – 2013-04-08 15:16:13

+1

您正在从... SQL获取视频流? – leonbloy 2013-04-08 17:37:34

回答

1

视频输入可能与原始未压缩视频帧并排连接到更复杂的多路复用文件格式兼容的数据块, .MP4文件。虽然前一种情况可能非常简单,但后者要求您解复用文件,在流中搜索,开始解码,可能跳过几帧,然后抓取感兴趣的帧。重点是它可能不像看起来那么简单。

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

0

有可能捕获框架与自由VideoConverter for .NET实际上是FFMpeg工具的包装。我们的想法是使用流媒体直播功能(以C#流)VideoConverter的特殊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(如果输入格式可用于实时流转换)。