0

我正在使用自定义源过滤器从 Internet 获取实时视频流,但不知道它是如何工作的。此源滤波器提供两个分别为音频/视频的输出引脚。当我只是使用它来将直播捕获到 avi 文件中时,如下所示: 简单的连接

它运作良好。但是,当我尝试在仍然捕获的同时进行预览时,我首先在自定义过滤器和 AVI Mux 之间添加了一个 Infinite Pin Tee 过滤器,如下所示: 与 InfTee 的连接

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

(ps:我认为在这里使用 Infinite Tee 而不是 Smart Tee 更好,因为该自定义过滤器看起来不像捕获过滤器。)

我尝试编写一个 Visual-C++ 代码做同样的事情,只是使用 CoCreateInstance、IGraphBuilder::AddFilter 和 IGraphBuilder::Connect。查看发生了什么错误以及 HRESULT 是什么。然后我发现调用 IMediaControl::Run 时程序挂起。(IMediaControl 的实例是从 IGraphBuilder 的实例中查询到的)。

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

谢谢你。:)

4

1 回答 1

1

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

具有多个 pin 源的典型流式传输问题是同一线程上的媒体样本交付。即使有道理,也应该避免这样做,因为由于流匹配或速率强制而阻塞流的下游过滤器不知道线程重用并最终会锁定死。

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

于 2013-10-14T09:10:51.603 回答