C# 用C语言从视频流中获取图像#
我试图从流中获取图像(更准确地说是MemoryStream)。我从微软找不到任何可以解决我问题的东西。 我从SQL中获取流,因此如果有某种方法可以从那里获取图像,那么就可以了。C# 用C语言从视频流中获取图像#,c#,.net,image,video,stream,C#,.net,Image,Video,Stream,我试图从流中获取图像(更准确地说是MemoryStream)。我从微软找不到任何可以解决我问题的东西。 我从SQL中获取流,因此如果有某种方法可以从那里获取图像,那么就可以了。 我检查了ffmpeg,问题是我需要保存视频文件。这些文件可以达到2GB,如果有办法不写入磁盘,这将非常有用。如果有办法只读取前10MB或其他有限大小的数据并从中读取图像,这也是一个解决方案。视频馈送可能简单到将原始未压缩视频帧并排传输到更复杂的多路文件格式兼容的数据块,例如MP4文件。虽然前一种情况可能非常简单,但后一种
我检查了ffmpeg,问题是我需要保存视频文件。这些文件可以达到2GB,如果有办法不写入磁盘,这将非常有用。如果有办法只读取前10MB或其他有限大小的数据并从中读取图像,这也是一个解决方案。视频馈送可能简单到将原始未压缩视频帧并排传输到更复杂的多路文件格式兼容的数据块,例如MP4文件。虽然前一种情况可能非常简单,但后一种情况要求您对文件进行解复用,在流中搜索,开始解码,可能跳过几帧,然后获取感兴趣的帧。关键是它可能不像看上去那么简单
Windows中的视频处理API是DirectShow、Media Foundation。使用DirectShow,可以在SQL支持的数据流上创建自定义数据源,并从中按需获取DB数据,使用API接口组件(库存和第三方)完成其余任务。
可以使用免费捕获帧,这实际上是FFMpeg工具的包装器。这一想法是使用视频转换器的实时流媒体功能(到C#流),用于特殊的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流读取实时流(如果输入格式可以与实时流转换一起使用)。视频只不过是图像帧的集合(例如,以Kinect彩色图像流为例)。考虑到图像大小、像素格式和起始位置,将其分割为多个片段应该不太困难。从你的角度来看,这有意义吗?谢谢你的回答。但我仍然不知道如何从流中获取单个图像。有我可以使用的图书馆吗?你正在从。。。SQL?