通訊協定變換
[與此頁面相關聯的功能 Windows Media Format 11 SDK是舊版功能。 來源讀取器和接收寫入器已取代它。 來源讀取器和接收寫入器已針對Windows 10和Windows 11進行優化。 Microsoft 強烈建議新程式碼盡可能使用來源讀取器和接收寫入器,而不是Windows 媒體格式 11 SDK。 Microsoft 建議使用舊版 API 的現有程式碼盡可能重寫為使用新的 API。
通訊協定變換是一個程式,可讓讀取器物件探索伺服器可用的最佳串流通訊協定。 每當讀取器開啟包含 「mms」 配置的 URL 時,讀取器就會使用通訊協定變換。
讀取器支援數種通訊協定:
- RTSP (即時串流通訊協定)
- 超文字傳輸通訊協定 (HTTP)
- Microsoft 媒體伺服器 (MMS)
RTSP 和 MMS 通訊協定都有兩種,一種是使用 UDP 作為基礎傳遞通訊協定,另一種是使用 TCP。
讀取器物件一律會使用 TCP 進行播放控制命令,但可以使用 TCP 或 UDP 傳遞串流內容。 建議使用 UDP 進行內容傳遞,因為它會造成比 TCP 較少的頻寬額外負荷。 TCP 通訊協定會透過使用「虛擬線路」來確保可靠的傳輸,但這麼做的成本表示 TCP 不適合數字媒體串流,其中有效率地使用頻寬會比偶爾遺失封包更為重要。
當 URL 指定 「mms://」時,讀取器會依下列順序嘗試使用下列通訊協定進行資料傳遞:
- 使用 UDP) 的 RTSPU (RTSP
- 使用 TCP) 的 RTSPT (RTSP
- 使用 UDP) 的 MMSU (MMS
- 使用 TCP) MMST (MMS
- HTTP
HTTP 是以 TCP 為基礎的單向通訊協定,而且是 Web 服務器所使用的通訊協定。 使用 HTTP 串流比使用 RTSP 的效率較低。 不過,大部分的防火牆都設定為接受 HTTP 要求,而它們通常會拒絕其他串流通訊協定。
Microsoft Windows Server 2003 中的 Windows 媒體服務 9 系列會拒絕 Windows 媒體格式 SDK 讀取器的任何 MMSU 或 MMST 要求,因為 RTSP 是慣用的串流通訊協定。 Windows 媒體服務 4.1 版和更早版本不支援 RTSP。 在此情況下,讀取器物件會回復為 MMSU 或 HTTP。
如果 URL 配置提供特定通訊協定,例如 RTSPU 的 「rtspu://」或 HTTP 的「HTTPs://」,則不適用通訊協定變換。 如果 URL 配置為 「rtsp://」,讀取器會嘗試 RTSPU 和 RTSPT,但沒有其他。
讀取器開啟檔案之後,您可以藉由在讀取器上呼叫 IWMReaderAdvanced2::GetProtocolName 方法,查詢它所使用的通訊協定。 當內容正在串流或下載時,此方法會在內容完全快取後立即傳回名稱, GetProtocolName 方法會傳回字串 「Cache」。
若要取得讀取器支援的所有 Windows 媒體伺服器通訊協定名稱,請在讀取器上呼叫 IWMReaderNetworkConfig::GetSupportedProtocolName 方法。 您可以使用 IWMReaderNetworkConfig 介面,在讀取器的通訊協定變換清單中停用一或多個通訊協定。 例如, IWMReaderNetworkConfig::SetEnableTCP 方法會啟用或停用 TCP 型通訊協定,而 IWMReaderNetworkConfig::SetEnableUDP 會啟用或停用 UDP 型通訊協定。 這些方法僅適用于通訊協定變換;如果 URL 配置包含特定通訊協定,則通訊協定仍可使用。 通常沒有任何理由停用通訊協定變換中使用的任何通訊協定;這樣做可能會降低效能。 不過,它可能很適合用於測試。