最近搞毕业设计,研究起了DirectShow,看了一个网络传输MPEG视频的源码,编译运行,发现客户端接收的视频没法显示出来,但是写入的文件是可以被正确播放的。最后调试跟踪到是这一句出了问题:
HRESULT hr = m_pGB->Render(m_pSourceReader->GetPin(0));
返回错误: hr 0x80040154 没有注册类
一开始在MSDN上搜索错误码 没有找到0x80040154的说明,于是在Google上搜索,只搜出了10几条相关内容,看了以后,说的好像是什么DLL没有注册,但是,这里用的都是程序中定义的类,没有什么外部导入的DLL的东西啊,觉得都好像都跟我的没有什么联系。有点郁闷。
接着,开始搜IGraphBuilder::Render函数,发现还是没有很有价值的东西。最后,直接搜m_pGB->Render(m_pSourceReader->GetPin(0)); 终于找到一条有价值的链接。说是由于Render智能连接使用了一些不正常的Filter(解释有点模糊,至少我不是太懂),可以尝试着往Filter Graph中先加入MPEG1 Stream Splitter,然后再调用Render去进行只能连接。我试了下,果然通了。
插入代码如下: