2009-06-26 84 views
1

我使用DirectShow在我的应用程序中播放音频/视频文件。我使用IGraphBuilder::RenderFile()来构建过滤器图形和IMediaControl接口来播放/暂停/停止媒体。这适用于本地媒体文件,但会对现场mms流造成问题。DirectShow停止/恢复实时流

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

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

有没有人知道如何恢复播放直播流而不破坏和重建过滤器图?

+0

你知道图中要添加哪些过滤器吗? – heavyd 2009-06-26 20:18:14

+0

GraphEdit为视频显示“ASF ACM Handler”+“WMAudio Decoder DMO”滤镜,“ASF ICM Handler”+“WMVideo Decoder DMO”滤镜。我遇到同样的问题,在GraphEdit中使用“渲染URL”选项来停止和恢复流。我正在使用天空新闻实时馈送进行测试(mms://live1.wm.skynews.servecast.net/skynews_wmlz_live300k) – flashk 2009-06-26 20:35:47

回答

2

该行为表示图中的某个过滤器表现出错误行为。如果您想要重新运行Feed,则必须更换过滤器。也没有好的源过滤器来渲染mms://流作为协议已经过时了。 Windows 7中的Windows Media Player使用其专用于应用程序的DirectShow过滤器。您最终可能会使用基于Windows Media Format SDK或第三方替代品的自定义源过滤器。

更新:在Windows XP中,mms:// URL由Windows Media Splitter过滤器(wmpasf.dll)改编。这显然是造成问题的原因。所以,如果你仍然要使用它,你可能需要删除,重新添加一个新的过滤器实例并重新渲染其引脚以重新启动流。正如我所提到的,这个过滤器不再适用于更新版本的Windows(至少是Windows 7)。

2
  1. 你为什么叫Stop()?你应该打电话给Pause()
  2. 彩信的DirectShow过滤器知道MMS有问题,对于初学者来说他们不支持最新的MMS 9(Win 2003自带)协议。如果您想要对MMS进行适当的支持,您应该使用Media Player Control或Format SDK。