协议滚动更新

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

协议滚动更新是一个过程,读取器对象可发现服务器中可用的最佳流式处理协议。 读取器在打开包含“mms”方案的 URL 时使用协议滚动更新。

读取器支持多种协议:

  • 实时流式处理协议 (RTSP)
  • 超文本传输协议 (HTTP)
  • Microsoft Media Server (MMS)

RTSP 和 MMS 协议有两种类型,一种使用 UDP 作为基础传递协议,另一种使用 TCP。

读取器对象始终使用 TCP 来播放控制命令,但它可以使用 TCP 或 UDP 来传送流式传输的内容。 UDP 是内容传递的首选,因为它的带宽开销比 TCP 少。 TCP 协议通过使用“虚拟线路”来确保可靠的传输,但这样做的成本意味着 TCP 不如数字媒体流适用,因为高效使用带宽比偶尔丢失的数据包更重要。

当 URL 指定“mms://”时,读取器将尝试使用以下协议进行数据传输,顺序如下:

  1. 使用 UDP) 的 RTSPU (RTSP
  2. RTSPT 使用 TCP) (RTSP
  3. 使用 UDP) 的 MMSU (彩信
  4. 使用 TCP) MMST (彩信
  5. HTTP

HTTP 是基于 TCP 的单向协议,是 Web 服务器使用的协议。 与使用 RTSP 时,使用 HTTP 进行流式处理的效率较低。 但是,大多数防火墙配置为接受 HTTP 请求,而它们通常拒绝其他流式处理协议。

Microsoft Windows Server 2003 中的 Windows Media 服务 9 系列将拒绝来自 Windows 媒体格式 SDK 读取器的任何 MMSU 或 MMST 请求,因为 RTSP 是首选的流式处理协议。 Windows Media 服务 4.1 及更早版本不支持 RTSP。 在这种情况下,读取器对象回退到 MMSU 或 HTTP。

如果 URL 方案提供特定协议(例如 RTSPU 的“rtspu://”或 HTTP 的“https://”),则协议滚动更新不适用。 如果 URL 方案为“rtsp://”,则读取器将尝试 RTSPU 和 RTSPT,但不会尝试其他方案。

读取器打开文件后,可以通过在读取器上调用 IWMReaderAdvanced2::GetProtocolName 方法来查询它使用的协议。 流式传输或下载内容时,此方法在内容完全缓存后立即返回名称, GetProtocolName 方法返回字符串“Cache”。

若要获取读取器支持的所有 Windows Media 服务器协议的名称,请在读取器上调用 IWMReaderNetworkConfig::GetSupportedProtocolName 方法。 可以使用 IWMReaderNetworkConfig 接口在读取器的协议滚动更新列表中禁用一个或多个协议。 例如, IWMReaderNetworkConfig::SetEnableTCP 方法启用或禁用基于 TCP 的协议, IWMReaderNetworkConfig::SetEnableUDP 启用或禁用基于 UDP 的协议。 这些方法仅适用于协议滚动更新;如果 URL 方案包含特定协议,则协议仍然可用。 通常没有理由禁用协议滚动更新中使用的任何协议;这样做可能会降低性能。 但是,它对于测试可能很有用。