技术分享| WebRTC 之 SDP 详解
一,什么是 SDP
WebRTC 是 Web Real-Time Communication,即网页实时通信的缩写,是 RTC 协议的一种 Web 实现,项目由 Google 开源,并和 IETF 和 W3C 制定了行业标准。
WebRTC 是点对点通讯,他的通话建立需要交换媒体信息才能建立,媒体信息的载体就是 SDP。SDP(Session Description Protocol) 是一种会话描述协议,基于文本,其本身并不属于传输协议,需要依赖其它的传输协议(比如 SIP, HTTP,自定义的信令等)来交换必要的媒体信息,用于两个会话实体之间的媒体协商,同时 SDP 也不是只为 WebRTC 使用,其他的传输比如 RTSP,SIP 通话也是通过 SDP 进行媒体协商。
SDP 是由多行文本组成的一个纯文本协议,如果将 SDP 从语义上分解成不同组件来描述一个多媒体会话信息,那么 SDP 由以下部分组成:
a,会话级别描述 b,网络描述 c,媒体级别描述 d,安全描述 e,DTLS 角色 f,ICE 策略 g,QoS,Grouping 传输描述
一个标准的 WebRTC 通话的建立,至少需要一次 Offer/Answer 交互,如下所示:
二,为什么 SDP 又分 PlanB 与 UnifiedPlan
WebRTC 的单个通道是可以传输多路音视频流的。而 PlanB 和 UnifiedPlan 其实就是 WebRTC 在多路媒体源(multi media source)场景下的不同的两种 SDP 协商方式。WebRTC 引入了 Stream 和 Track 的概念,一个流:Stream 可能包含音轨:AudioTrack 和 视轨:VideoTrack,当有多路 Stream 时,就会有更多的 Track,那么 UnifiedPlan 就是每一个 Track 唯一对应一个自己的 M 描述,而 Plan B 就是每一个 M line 描述了多个 Track(track id)。
我们来详细的介绍一下 PlanB 和 UnifiedPlan 的区分:
对于 PlanB 来说,由于只有一个 M(audio) 和 M(video),隶属于同一个 M line 的编码格式是相同的,当有多路媒体流(一路流就是一个 track)时,则根据 SSRC 去区分,意味着在 PlanB 中一个 Mline 中含有多个 SSRC 的流,这些媒体流共用同一个编码格式。对于 UnifiedPlan 来说,由于可以有多个 M(audio) 和 M(video),每路流(一路流就是一个 track)都有自己的 M Line,每个 M line 都能够指示自己的编码格式。
示例如下:
A,Plan-B:
B,UnifiedPlan:
从上面可以看出,UnifiedPlan 相对要更清晰,更精简一点。WebRTC 在 M79 版本之后正式的支持了 UnifiedPlan,这也让其成为了现在的主流 SDP 交互方式。
三,anyRTC 对 WebRTC 的支持
anyRTC 早在 WebRTC 的创建初期,就是其忠实的追随者,从 2015 年开始,一直保持着 WebRTC-Master 的代码更新,我们也经历了 WebRTC 的 api,设计的一次次变迁。
现在 anyRTC 公有云推流端支持 SimulCast 方式推送多码率的视频流;拉流端支持单通道多路流的方式。
同时 anyRTC 的著名开源项目anyRTC-RTMP-OpenSource也支持 WebRTC 的推拉流。
版权声明: 本文为 InfoQ 作者【anyRTC开发者】的原创文章。
原文链接:【http://xie.infoq.cn/article/75caceac8ef2f34c2f19a9dab】。文章转载请联系作者。
评论