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
[email protected] (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] Vue i18n - Pluralization

>>:  找LeetCode上简单的题目来撑过30天啦(DAY4)

透明这回事

前言 透明向来是敏捷强调的,Scrum 更是把透明列为三大支柱之一,今天想跟大家分享一下我对透明的看...

[Day 20] Reactive Programming - Spring WebFlux

前言 对Reactor有一定的认识之後,接下来就要进入正题(迷:经过二十天才到正题?!),毕竟大部分...

Day 27- 鬼斧神工 :Serverless 电商 - 实战 - 後端开发 (三)资料库存取

图片来源:Azure 高负载 在Ecommerce的状态下我们最怕的便是在订单处理跟库存的部分(在...

[Day 13] -『 GO语言学习笔记』- 核心型别(I)

以下笔记摘录自『 The Go Workshop 』。 前言 Go语言是强型别(strongly t...

Day7 JS-Callback

在进入下一个NodeJS部份前想先讲一下Callback(回呼),这个概念不会占太大的篇幅,所以这篇...