iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
Modern Web

後疫情時代的 WebRTC 微學習系列 第 5

Day05 媒體協商與SDP

媒體協商

上一篇提到,要進行 WebRTC的連線需要處理以下兩個問題,今天我們就來看看媒體協商的部分。

  1. 必須要先知道要如何與對方連線
  2. 必須了解彼此支援哪些媒體格式

https://ithelp.ithome.com.tw/upload/images/20210919/20130062odYfQ4bF3t.png

Bob 與 Alice 想要進行通話,Bob 的設備可以支援 VP8、H264,Alice 的設備可以支援 VP9、H264,若要確保兩人都可以正確的編解碼,最簡單的辦法就是取他們的交集 H264。

有一個專門的協議 ,稱爲Session Description Protocol (SDP),可用於描述上述這類信息,在WebRTC中,參與視訊的雙方必須先交換SDP信息,而交換SDP的過程,也稱爲"媒體協商"。

媒體協商的流程

Bob 要對 Alice發起通話:

https://ithelp.ithome.com.tw/upload/images/20210919/20130062BGLgSNFoQZ.png

  1. Bob 呼叫 RTCPeerConnection.createOffer 建立一個 offer ,並呼叫 setLocalDescription 設定本地的 SDP。
  2. 通過 Signaling server 將包含 Bob SDP 的offer 發送給 Alice。
  3. Alice 收到 offer 後呼叫 setRemoteDescription 設定 Bob 的 SDP。
  4. Alice 呼叫 RTCPeerConnection.createAnswer 建立一個 answer ,並呼叫 setLocalDescription 設定本地的 SDP。
  5. 通過 Signaling server 將包含 Alice SDP 的 answer 發送給 Bob 。
  6. Bob 收到 answer 後呼叫 setRemoteDescription 設定 Alice 的SDP

SDP

SDP(Session Description Protocol) 是一份具有特殊約定格式的純文本描述文檔(類似 JSON / XML),其中包含了 WebRTC 建立連接所需的 ICE 伺服器資訊、音視訊編碼資訊、加密演算法等,以便於在資料傳遞時兩端都能看懂對方的資料,而開發者可以使用 WebSocket 等傳輸協議將其發送到信令服務器。要注意的是這些內容只是描述資料的樣子,而不是資料本身。

SDP 通常包含以下內容:

  1. 各端所支援的影音編解碼器
  2. 編解碼所設定的參數
  3. 所使用的傳輸協議
  4. ICE連接候選項等

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
    
    1. 第一個是音訊在 port 49170 使用 RTP/AVP payload type 0
    2. 第一個是視訊在 port 51372 使用 RTP/AVP payload type 99
  • a=rtpmap:99 h263-1998/90000

    包含一個屬性, 將 RTP/AVP payload type 99 mapping 為 h263

RTP payload formats 參考

總結

SDP 廣泛應用在各種類似的技術如 SIP、RTP、RSP等等,在 WebRTC 為了實現影音即時通訊做了部分的修改,認識 SDP 後我們可以更好地理解 WebRTC 是如何運作的,未來發聲連線失敗或其他影音問題我們就可以來分析看看 SDP 應該會很有效!


上一篇
Day04 如何通訊-網路協商
下一篇
Day06 WebRTC 中的 Signaling Server
系列文
後疫情時代的 WebRTC 微學習30

尚未有邦友留言

立即登入留言