1

我正在使用 DirectShow 在我的应用程序中播放音频/视频文件。我使用IGraphBuilder::RenderFile()来构建过滤器图和IMediaControl接口来播放/暂停/停止媒体。这适用于本地媒体文件,但会导致实时彩信流出现问题。

如果我在实时流上调用IMediaControl::Stop(),则流将按预期停止播放。但是,如果我调用IMediaControl::Run()来恢复流,则不会发生任何事情。该图生成一个 EC_COMPLETE 事件,但视频不再播放。

调用IMediaControl::Pause()后跟IMediaControl::Run()将恢复它停止的流,但最终会停止。似乎只是在调用IMediaControl::Pause()时播放缓冲区中的数据,而不是与实时流重新同步。

有人知道如何在不破坏和重建过滤器图的情况下恢复播放直播吗?

4

2 回答 2

2
  1. 为什么要调用 Stop()?你应该打电话给 Pause()
  2. 众所周知,用于 MMS 的 DirectShow 过滤器存在 MMS 问题,对于初学者来说,它们不支持最新的 MMS 9(Win 2003 附带)协议。如果您想要对 MMS 的适当支持,您应该使用 Media Player Control 或 Format SDK。
于 2009-06-28T06:27:22.047 回答
2

该行为表明图表中的过滤器之一表现出错误行为。如果您希望能够重新运行提要,则必须更换过滤器。此外,也没有好的源过滤器来呈现作为协议本身已经过时的 mms:// 流。Windows 7 中的 Windows Media Player 使用其私有 DirectShow 过滤器,该过滤器不适用于应用程序。您最终可能会使用基于 Windows Media Format SDK 的自定义源过滤器或第三方替代品。

更新:在 Windows XP 中,mms:// URL 由Windows Media Splitter过滤器 (wmpasf.dll) 重新处理。它显然对有问题的错误负责。因此,如果您仍要使用它,您可能必须删除、重新添加过滤器的新实例并重新渲染其引脚才能重新开始流式传输。正如我所提到的,这个过滤器在更新的 Windows 版本(至少是 Windows 7)中不再可用。

于 2011-10-12T11:55:41.147 回答