摘要
本文描述了WebRTC标准中的会话描述协议(SDP)。
两个浏览器端的WebRTC应用在开始传输音视频数据之前,需要借助RTCPeerConnection对象建立会话。
建立会话的主要目的如下:
1.描述会话名称、会话时长。
2.协商音视频编解码标准(如:Opus、G722、VP8)、音频采样率和通道数、音频帧时长等。
3.协商网络通信质量反馈和改善策略,如:采用什么拥塞控制算法、是否开启NACK、FEC等。
4.协商网络安全机制和相关参数,如:ICE用户名和密码,DTLS证书指纹,DTLS用户角色等。
5.收集网络传输Candidate,构建CandidatePair列表。
6.根据CandidatePair列表和用户配置的优先级规则,逐个尝试建立连接,直到首个连接建立成功。
在会话相关参数尚未协商确定之前,WebRTC是不知道如何传输音视频数据的。
WebRTC如何描述会话相关参数呢?答案就是采用SDP。
SDP是一个可扩展的规范,WebRTC中的SDP是在标准SDP规范基础上扩展而成的。
标准SDP规范
SDP是Session Description Protocol(会话描述协议)的缩写。
SDP描述由许多文本行组成,文本行的格式定义为:<key>=<value>[CRLF]
<key>是一个英文字母,<value>是结构化的文本串,<value>的格式依<key>而定。
WebRTC中的SDP规范
WebRTC对标准SDP规范进行了扩展,先后定义了两套规范:PlanB和UnifiedPlan。
这两套规范主要差异是:在PlanB中同一类m只能出现一次,同一类m的多个实例需要借助cname别名来区分;而在UnifiedPlan中,每种类型的m(比如:m=video)可以出现多个,每个实例必须单独描述。UnifiedPlan对媒体的描述比PlanB更清晰。
SDP的核心功能
SDP的核心就两个功能:会话描述和媒体描述。
会话描述常用关键词:v、o、s、t。
媒体描述常用关键词:m、a。
m全称为media(媒体),用于描述一个独立的媒体(可理解为MediaStreamTrack)。
a全称为attribute(属性),用于补充描述m关键词描述的媒体的压缩编码和网络传输参数。
其它常用关键词及其用途如下图所示:
ORTC规范
许多学者认为在新潮的WebRTC API中采用古老的SDP来描述会话不太合适。
以微软为首的ORTC(Object Real-Time Communication)组织提出了全新WebRTC API标准ORTC。
ORTC采用了面向对象的设计,将接口分散到Sender、Receiver、Transport等对象中。
在ORTC中,WebRTC原有的一些概念(如:SDP、Offer/Answer、RTCPeerConnection等)都消失了。
总结
本文介绍了SDP在WebRTC标准中的作用,展望了WebRTC API标准的未来。