对于MP4文件,DirectShow视频播放失败,而不是AVI文件

时间:2015-05-27 11:35:01

标签: c++ video directshow

我正在尝试使用DirectShow播放视频。为了测试我在这里有两个文件,一个AVI,一个MP4。这两个文件都包含一个H264视频流,两个文件都使用IGraphBuilder::RenderFile完美播放。不幸的是,部署时文件不一定会存储在本地。所以我用这个片段替换了对RenderFile的调用(加上错误处理):

graphBuilder->AddSourceFilter(file, NULL, &sourceFilter);
sourceFilter->FindPin(L"Output", &outputPin);
graphBuilder->Render(outputPin);

这适用于使用HTTP的本地文件和远程文件。但仅适用于AVI文件。 MP4文件无法播放。

根据MSDN文档AddSourceFilterRender应根据需要自动添加过滤器,我希望这些过滤器能够正常工作,尤其是RenderFile设法完成此过程。

有没有人知道为什么这不起作用,更重要的是,如何修复它?

修改

RenderFile为AVI生成的过滤器图形与Render生成的过滤器图形完全相同。另一方面,对于MP4,Render会添加音频路径,即使该文件不包含音频流。

MP4 RenderFile
---------------------------- 
Video Renderer
FSL MX53 VPU Decoder Filter
FSL MP4 Parser
\FlashDisk\video.mp4

MP4 Render
----------------------------
Video Renderer
FSL AAC Plus Decoder Filter
Audio Renderer
FSL MX53 VPU Decoder Filter
FSL MP4 Parser
\FlashDisk\video.mp4

0 个答案:

没有答案