上一篇提到,要進行 WebRTC的連線需要處理以下兩個問題,今天我們就來看看媒體協商的部分。
Bob 與 Alice 想要進行通話,Bob 的設備可以支援 VP8、H264,Alice 的設備可以支援 VP9、H264,若要確保兩人都可以正確的編解碼,最簡單的辦法就是取他們的交集 H264。
有一個專門的協議 ,稱爲Session Description Protocol (SDP),可用於描述上述這類信息,在WebRTC中,參與視訊的雙方必須先交換SDP信息,而交換SDP的過程,也稱爲"媒體協商"。
Bob 要對 Alice發起通話:
RTCPeerConnection.createOffer
建立一個 offer ,並呼叫 setLocalDescription
設定本地的 SDP。setRemoteDescription
設定 Bob 的 SDP。RTCPeerConnection.createAnswer
建立一個 answer ,並呼叫 setLocalDescription
設定本地的 SDP。setRemoteDescription
設定 Alice 的SDPSDP(Session Description Protocol) 是一份具有特殊約定格式的純文本描述文檔(類似 JSON / XML),其中包含了 WebRTC 建立連接所需的 ICE 伺服器資訊、音視訊編碼資訊、加密演算法等,以便於在資料傳遞時兩端都能看懂對方的資料,而開發者可以使用 WebSocket 等傳輸協議將其發送到信令服務器。要注意的是這些內容只是描述資料的樣子,而不是資料本身。
SDP 通常包含以下內容:
SDP 使用 <type>=<value>
這樣的格式,其中
<type>
和 <value>
是嚴格區分大小寫的。=
之間不能有空格<type>
為單一小寫字母,用意是不可隨便擴充<value>
多個值可以用空白分隔範例如下:
v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
e=j.doe@example.com (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000
說明:
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
此會話由用戶 jdoe 發起,位於 IPv4 地址 10.47.16.5。
s=SDP Seminar
會話的名字是 SDP Seminar
有兩組 media stream
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000
包含一個屬性, 將 RTP/AVP payload type 99 mapping 為 h263
SDP 廣泛應用在各種類似的技術如 SIP、RTP、RSP等等,在 WebRTC 為了實現影音即時通訊做了部分的修改,認識 SDP 後我們可以更好地理解 WebRTC 是如何運作的,未來發聲連線失敗或其他影音問題我們就可以來分析看看 SDP 應該會很有效!