DirectShow 中的 ASF Web 流播放

[与此页面关联的功能 DirectShow 是旧版功能。 它已被 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获所取代。 这些功能已针对Windows 10和Windows 11进行了优化。 Microsoft 强烈建议新代码尽可能在 Media Foundation 中使用 MediaPlayerIMFMediaEngine音频/视频捕获 ,而不是 DirectShow。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Microsoft DirectShow 支持通过 WM ASF 读取器 筛选器在文件播放方案中使用 Web 流,但你必须编写自己的 DirectShow 筛选器来捕获和持久保存流。

注意

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

 

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

Web 流中的每个媒体示例都包含 一个WMT_WEBSTREAM_SAMPLE_HEADER 结构,该结构在 Windows 媒体格式 SDK 文档中进行了记录。 结构具有可变长度,具体取决于其 wszURL 成员的长度。 指向示例数据的指针最初指向此结构,并且必须将指针推进到结构之后才能访问流中的实际数据。

Web 流处理程序筛选器应基于 CBaseRenderer 类。 在 CBaseRenderer::D oRenderSample 方法中,筛选器需要分析结构以获取有关 Web 流的信息,然后执行相应的操作。 通常,这将涉及将文件保存到磁盘,然后调用 CreateUrlCacheEntryCommitUrlCacheEntryWCommitUrlCacheEntryA 函数将文件放入 Internet Explorer 缓存中。 筛选器必须处理多部分文件(即大于一个示例的文件),还必须处理 由 WMT_WEBSTREAM_SAMPLE_HEADER.wSampleType 成员指定的呈现命令。 筛选器将 EC_OLE_EVENT 事件以及包含要呈现的文件名称的 WMT_WEBSTREAM_SAMPLE_HEADER.wszURL 字符串的文本发送到应用程序。 然后,应用程序会导致浏览器显示指定的页面。 如果 Web 流已正确创作,则文件应已位于缓存中。

有关WMT_WEBSTREAM_FORMAT和WMT_WEBSTREAM_SAMPLE_HEADER的详细信息,请参阅 Windows Media Format SDK 文档。

在 DirectShow 中读取 ASF 文件