我可以从DirectShow获取原始视频帧而无需播放

mot*_*s_g 4 windows directshow ms-media-foundation

我正在使用Media Foundation处理媒体播放器.我想支持VOB文件播放.但是,媒体基金会目前不支持VOB容器.因此我希望使用DirectShow.

我的想法是不使用DirectsShow图形来获取备用路径,而是抓住视频帧并将其传递到媒体基础中的相同管道.在媒体基础上,我有一个'IMFSourceReader',它只是从视频文件中读取帧.是否有一个直接显示等效,只是给我框架而不需要创建图形,开始播放周期,然后尝试从渲染引脚中提取帧?(更清楚的是,DirectsShow是否支持一种架构,它可以在不实际播放视频的情况下为我提供原始帧?)

我已经阅读了有关ISampleGrabber的内容,但它被弃用了,我认为它不适合我的架构.我以前没有在DirectShow上工作过.

谢谢,Mots

Rom*_* R. 6

您必须构建一个图形并接受来自相应解析器/解复用器过滤器的帧,该过滤器将读取容器并在其输出上传递单个帧.

播放不一定是实时的,也不需要在某处伪造那些视频帧.获得Sample Grabber过滤器或客户过滤器所需的数据后,您可以使用a终止管道Null Renderer.也就是说,您可以以一种或多或少的方式安排获取所需的帧.

  • 在DirectShow中(与MF相反),图形不会管理过滤器之间的多少通信.只要您构建图形/管道并点击启动,过滤器就会自行传输数据.也就是说,要捕获帧,您需要在VOB容器读取器旁边的管道中使用您自己的过滤器(或者,如果您需要解码帧,则需要视频解码器),否则您可以使用stadnard Sample Grabber过滤器设置通过它的`SampleCB`方法.然后,只要运行图形,就可以在此回调中逐个获取所有视频帧. (4认同)
  • 正如我所说,你可以获得原始和/或解码的视频帧,具体取决于你是否在视频解码器之前或之后包含你的"抓点".你甚至可以在那之前和之后有两个抓取器,你将有一个原始和解码视频帧的回调. (3认同)