Directshow - IMediaControl :: Run在使用自定义Source,InfTee和AVI Mux时挂起

时间:2013-10-14 08:53:56

标签: visual-c++ directshow multimedia graphedit

我正在使用自定义源过滤器从互联网获取实时视频流,而不知道它是如何工作的。该源滤波器提供两个分别为音频/视频的输出引脚。当我只是用它将livestream捕获到avi文件中时,如下所示: Simple Connectiones

效果很好。但是,当我在仍然保持捕捉时尝试进行预览时,我首先在自定义滤镜和AVI Mux之间添加了一个无限针T形滤镜,如下所示: Connections with an InfTee

然后GraphEdit中的图形无法启动(当我点击“启动图形”按钮时,它什么也没做,也没有任何反应)。

(ps:我认为最好在这里使用Infinite Tee而不是Smart Tee,因为自定义滤镜看起来不像是捕捉滤镜。)

我尝试编写Visual C ++代码,只需使用CoCreateInstance,IGraphBuilder :: AddFilter和IGraphBuilder :: Connect即可。看看发生了什么错误以及HRESULT是什么。然后我发现当调用IMediaControl :: Run时程序挂起。 (从IGraphBuilder的实例中查询了IMediaControl的实例。)

我不知道它为什么会这样,我也不知道如何调试它。那么有人给我任何帮助或提示吗?

谢谢。 :)

1 个答案:

答案 0 :(得分:1)

如果您有自定义源过滤器的源代码,您可以自己查看并查看死锁上下文。

多引脚源的典型流式传输问题是在同一线程上传输媒体样本。即使有意义,也应该避免这样做,因为出于流匹配或速率实施的原因而阻止流式传输的下游过滤器不知道线程重用并且最终会锁死。

如果您有源过滤器的源代码,请确保在线程之间分配样本传递。否则,开发一个辅助过滤器,使用工作线程实现异步队列,并通过这些过滤器连接除第一个引脚外的源输出引脚。