DirectShow 中的 Web 流播放

[与此页面关联的功能 Windows Media Format 11 SDK 是旧版功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能使用源读取器和接收器编写器,而不是 Windows Media Format 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Microsoft DirectShow 支持 Web 流 (请参阅 Web 流 ,了解通过 WM ASF 阅读器 筛选器在文件播放方案中) 的详细信息,但你必须编写自己的 DirectShow 筛选器来捕获和持久保存流。

注意

若要播放从运行 Windows Media 服务 的服务器流式传输的内容中的 Web 流,请使用网页中嵌入的 Windows 媒体播放器 9 系列 ActiveX® 控件。

 

当给定包含 WMMEDIATYPE_FileTransfer 类型的流的文件时,WM ASF 读取器将为其创建输出引脚。 格式块将是 一个WMT_WEBSTREAM_FORMAT 结构。 如果没有可用于处理该媒体类型的下游筛选器,则引脚将保持未连接状态,但文件仍将播放音频和/或视频流。

请务必了解,Web 流中的每个媒体示例都包含 一个WMT_WEBSTREAM_SAMPLE_HEADER 结构,该结构具有可变的长度,具体取决于其 wszURL 成员的长度。 指向示例数据的指针最初指向此结构,并且必须将指针推进到结构之后才能访问流中的实际数据。 Web 流处理程序筛选器应基于 CBaseRenderer 类。 在 DoRenderSample 方法中,筛选器需要分析结构以获取有关 Web 流的信息,然后执行相应的操作。 通常,这将涉及将文件保存到磁盘,然后调用 CommitUrlCacheEntryCreateUrlCacheEntry 将文件放入 Internet Explorer 缓存中。 筛选器必须处理多部分文件(即大于一个示例的文件),还必须处理 由 WMT_WEBSTREAM_SAMPLE_HEADER.wSampleType 成员指定的呈现命令。 筛选器将 EC_OLE_EVENT 连同包含要呈现的文件名称的 WMT_WEBSTREAM_SAMPLE_HEADER.wszURL 字符串的文本一起发送到应用程序。 然后,应用程序会导致浏览器显示指定的页面。 如果 Web 流已正确创作,则文件应已位于缓存中。

有关 CBaseRendererDoRenderSampleEC_OLE_EVENT的详细信息,请参阅 DirectShow SDK 文档。

Web 流