C++ DirectShow停止/恢复实时流

C++ DirectShow停止/恢复实时流,c++,directshow,C++,Directshow,我正在使用DirectShow在我的应用程序中播放音频/视频文件。我用它来构建过滤图和播放/暂停/停止媒体的界面。这适用于本地媒体文件,但会导致实时彩信流出现问题 如果我调用实时流,该流将按预期停止播放。但是,如果我调用以恢复流,则什么也不会发生。图形生成一个EC_完成事件,但视频不再播放 调用后跟将在流停止时继续流,但最终将停止。它似乎只是回放调用时缓冲区中的数据,而不是与实时流重新同步 有人知道如何在不破坏和重建过滤图的情况下恢复播放直播流吗 为什么要调用Stop()?您应该调用Pause(

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

如果我调用实时流,该流将按预期停止播放。但是,如果我调用以恢复流,则什么也不会发生。图形生成一个EC_完成事件,但视频不再播放

调用后跟将在流停止时继续流,但最终将停止。它似乎只是回放调用时缓冲区中的数据,而不是与实时流重新同步

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

  • 为什么要调用Stop()?您应该调用Pause()
  • 众所周知,用于彩信的DirectShow过滤器在彩信方面存在问题,首先,它们不支持最新的MMS 9(Win 2003附带)协议。如果您希望正确支持彩信,则应使用Media Player控件或Format SDK
  • 为什么要调用Stop()?您应该调用Pause()
  • 众所周知,用于彩信的DirectShow过滤器在彩信方面存在问题,首先,它们不支持最新的MMS 9(Win 2003附带)协议。如果您希望正确支持彩信,则应使用Media Player控件或Format SDK

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


    更新:在Windows XP中,mms://URL由
    Windows Media Splitter
    filter(wmpasf.dll)重新加密。很明显,这是问题所在。因此,如果仍要使用它,则可能必须删除、重新添加过滤器的新实例并重新渲染其管脚,以便重新启动流式处理。正如我所提到的,此筛选器在较新版本的Windows(至少是Windows 7)中不再可用。

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


    更新:在Windows XP中,mms://URL由
    Windows Media Splitter
    filter(wmpasf.dll)重新加密。很明显,它应该对所讨论的bug负责。因此,如果仍要使用它,则可能必须删除、重新添加过滤器的新实例并重新渲染其管脚,以便重新启动流式处理。正如我所提到的,此过滤器在较新版本的Windows(至少在Windows 7中)中不再可用。

    您知道要将哪些过滤器添加到图表中吗?GraphEdit显示音频的“ASF ACM Handler”+“WMAudio Decoder DMO”过滤器和视频的“ASF ICM Handler”+“WMVideo Decoder DMO”过滤器。使用GraphiEdit中的“Render URL”选项停止和恢复流时也会遇到同样的问题。我正在使用天空新闻直播源进行测试(mms://live1.wm.skynews.servecast.net/skynews_wmlz_live300k)您是否尝试过IMediaControl::Pause()而不是::Stop()?这可能有效,也可能无效,这取决于源或任何筛选器的实现,还取决于流的属性。源/解复用筛选器是什么?它使用“Windows Media源筛选器”作为源筛选器。如果我Pause()然后运行()图形,它将在Pause()发生的位置继续,但会停止缓冲。因此,它似乎只是播放缓冲区中剩余的内容,然后停止。您知道要将哪些过滤器添加到图形中吗?GraphEdit显示音频的“ASF ACM Handler”+“WMAudio Decoder DMO”过滤器和视频的“ASF ICM Handler”+“WMVideo Decoder DMO”过滤器。使用GraphiEdit中的“Render URL”选项停止和恢复流时也会遇到同样的问题。我正在使用天空新闻直播源进行测试(mms://live1.wm.skynews.servecast.net/skynews_wmlz_live300k)您是否尝试过IMediaControl::Pause()而不是::Stop()?这可能有效,也可能无效,这取决于源或任何筛选器的实现,还取决于流的属性。源/解复用筛选器是什么?它使用“Windows Media源筛选器”作为源筛选器。如果我Pause()然后运行()图形,它将在Pause()发生的位置继续,但会停止缓冲。因此,它似乎只是播放缓冲区中剩余的任何内容,然后停止。1)我尝试了这个方法,但没有按预期工作。我编辑了我的问题来解释这一点。2) 我更愿意继续使用DirectShow,因为它适用于所有其他媒体类型。不过我会看看你提到的另一个SDK。谢谢。1)我试过了,但没有达到预期效果。我编辑了我的问题来解释这一点。2) 我更愿意继续使用DirectShow,因为它适用于所有其他媒体类型。不过我会看看你提到的另一个SDK。谢谢