我正在尝试使用DirectShow播放视频。为了测试我在这里有两个文件,一个AVI,一个MP4。这两个文件都包含一个H264视频流,两个文件都使用IGraphBuilder::RenderFile
完美播放。不幸的是,部署时文件不一定会存储在本地。所以我用这个片段替换了对RenderFile
的调用(加上错误处理):
graphBuilder->AddSourceFilter(file, NULL, &sourceFilter);
sourceFilter->FindPin(L"Output", &outputPin);
graphBuilder->Render(outputPin);
这适用于使用HTTP的本地文件和远程文件。但仅适用于AVI文件。 MP4文件无法播放。
根据MSDN文档AddSourceFilter
和Render
应根据需要自动添加过滤器,我希望这些过滤器能够正常工作,尤其是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