統一方案 SDP 格式 - 轉換計畫

Google 預計在未來幾季內,將 Chrome 的 WebRTC 實作方式從目前的 SDP 格式 (稱為「Plan B」) 轉換為符合標準的格式 (稱為「Unified Plan」,即 draft-ietf-rtcweb-jsep)。

這項計畫包含 5 個階段和一個暫時性 API 功能。

受影響對象

如果在單一 PeerConnection 上使用多個音軌或多個影像軌,就必須在統一計畫下測試產品,並據此調整。如果呼叫是從非 Chrome 端點發起,並由 Chrome 回覆,則可能需要變更提案的形式。進行詳細 SDP 剖析並關心 msid 屬性的使用者,必須檢查剖析程式碼是否採用新格式 (a=msid)。關於是否需要變更,以及應用程式需要如何變更的詳細資訊,會因應用程式而異。我們認為,幾乎所有只使用單一音訊和單一影片軌的 RTCPeerConnection 應用程式,都不會受到這項變更的影響。

API 功能

我們將在 RTCPeerConnection 的 RTCConfiguration 中新增一項功能:

enum SdpSemantics {
  "plan-b",
  "unified-plan"
};


partial dictionary RTCConfiguration {
   SdpSemantics sdpSemantics;
}

RTCConfiguration 可傳遞至 RTCPeerConnection 的建構函式,而建構的所有提案和答案都會採用統一企劃書格式。呼叫 setLocalDescription 和 setRemoteDescription 時,系統也會預期 SDP 採用統一計畫格式;如果採用的是舊版 Chrome 格式,系統會忽略除了第一個音訊音軌和第一個視訊音軌以外的所有內容。

另外還有一個指令列標記 (在 Chrome M71 以上版本中為 –enable-features=RTCUnifiedPlanByDefault,在較舊版本中為 –enable-blink-features=RTCUnifiedPlanByDefault),可將此標記的預設值設為「unified-plan」。

階段

階段 1:導入統一企劃書

在這個階段,統一企劃書是透過 M65 推出的實驗旗標開發而成。在第 2 階段之前,建議您使用「–enable-blink-features=RTCUnifiedPlan」來測試 Chrome Canary。

第 2 階段:全面開放 API 功能

在 M69 中發布 (2018 年 8 月推出 Beta 版,2018 年 9 月推出穩定版)

在這個階段,sdpSemantics 標記的預設值為「plan-b」。在第 2 階段,如果實作項目依賴 SDP 格式,則應執行測試,看看在使用統一企劃書時,應用程式是否能正常運作。對於支援 Firefox 的應用程式,這項作業應該非常簡單:只要按照 Firefox 的做法即可。

您可以在「chrome://flags」中變更 sdpSemantics 標記的預設值,請找出「WebRTC: Use Unified Plan SDP Semantics by default」功能。

階段 3:切換預設值

切換日期為 M72 (2018 年 12 月推出 Beta 版,2019 年 1 月推出穩定版)。

在此階段,我們將 sdpSemantics 標記的預設值變更為「unified-plan」。如果應用程式發現需要更多時間進行轉換,則會明確將 sdpSemantics 標記設為「plan-b」,以便還原先前的行為。

階段 4:執行「Plan B」投擲

在這個階段,將 sdpSemantics 標記設為「plan-b」會導致擲回例外狀況。自 M93 起,這個問題就會在 Canary 中發生。自 M96 起,例外狀況會在所有管道 (包括穩定版) 中發生。

在此階段,我們提供淘汰前測試版,可讓您在沒有例外狀況拋擲的情況下使用 Plan B,但測試版已於 2022 年 5 月 25 日停止運作。

階段 5:從 Chromium 中移除「Plan B」

試用期結束後,Chrome 會移除 Plan B。此時,系統會移除 sdpSemantics 標記。嘗試將其設為「plan-b」不會擲回例外狀況,但也不會再產生任何影響。

特殊標記或特殊版本仍可使用 Plan B,但完整的程式碼移除作業將於 2022 年下半年進行。

第 6 階段:淘汰並移除 WebRTC 中的「Plan B」

Plan B 已在 WebRTC 中標示為已淘汰,但仍可使用。移除作業應會在 2023 年完成。

為統一方案準備應用程式

如要進一步瞭解 Plan B 和統一方案的差異,以及應用程式可能需要如何更新,以便因應統一方案,請參閱「統一方案」轉換指南 (JavaScript)。

如為原生 (C++) 應用程式,請參閱「將原生/行動應用程式遷移至統一計畫」文件