WebRTC技术文档 -- 4.SDP(笔记)

SDP:Session Description Protocol,会话描述协议。

4.1 SDP的标准规范

4.1.1 SDP的组织结构

在整个SDP中,只能有一个会话描述,可以有多个媒体描述。

SDP以<type>=<value>的格式描述会话内容。<type>表示描述的目标,它由单个字符构成;<value>是对<type>的解释或约束。

会话包含的<type>有v(protocol version,协议版本)、o(owner/creator and session identifier,会话的创建者)、s(session name,会话名)、t(time the session is active,会话时长)。媒体包含的<type>主要是m(media,媒体)。公共的<type>有c(connection information,网络信息)、a(attribute,属性)等。

4.1.2 SDP字段含义及格式

4.2 WebRTC中的SDP

WebRTC引入SDP来描述媒体信息,用于媒体协商时决定双方是否可以进行通信。WebRTC对媒体描述中的内容做了大幅增加以满足自身的需求。

4.2.1 m=

格式:m=<media> <port> <transport> <fmt list> ...

<media>表示媒体类型,可以是audio、video等。

<port>表示该媒体使用的端口号。WebRTC不使用SDP中描述的网络信息,该端口号对其没有意义。

<transport>表示使用的传输协议,可以是UDP、TCP等。

例如UDP/TLS/RTP/SAVFP表示:传输时底层使用UDP;UDP之上使用DTLS协议交换证书;证书交换好后,由RTP传输媒体数据,保证传输的可靠性;媒体数据的安全性由SRTP负责,即对RTP包中的Body部分进行加密;传输时使用RTCP的feekback机制对传输信息进行实时反馈(SAVPF,SRTP Audio Video Profile Feedback),以便进行拥塞控制。

<fmt list>表示媒体数据类型,一般为PayloadType列表,其具体含义用"a=rtpmap"阐述。

4.2.2 a=rtpmap

表示PayloadType与编码器的映射,每个PayloadType对应一个编码器。

格式:a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encodingparameters>]

示例:a=rtpmap:111 opus/48000/2

表示PayloadType值为111的编码器是Opus,其时钟频率(采样率)为48000Hz,音频通道数为2。

4.2.3 a=fmtp

fmtp(format parameters)用于指定媒体数据格式。

格式:a=fmtp:<format> <format specific parameters>

示例:a=fmtp:111 minptime=10;useinbandfec=1

表示PayloadType值为111的数据(Opus数据):以10ms长的音频数据为一帧,且数据经FEC(Forward Error Correction,前向纠错)编码。

4.2.4 rtx

示例:a=rtpmap:97 rtx/90000

          a=fmtp:97 apt=96

rtx表示丢包重传,apt(associated payload type)的值为96,说明96和97是关联在一起的,PT=97是PT=96的补充。当WebRTC使用的媒体数据类型(PayloadType)为96,如果出现丢包需要重传,重传数据包的PayloadType为97。

4.2.5 red

red(Redundant coding,冗余代码)是一种在WebRTC中使用的FEC算法,用于防止丢包。默认情况下WebRTC会将VP8/H264等编码器编码后的数据再交由red模块编码,生成带一些冗余信息的数据包,当传输中某个包丢了,可以通过其他包将其恢复回来,而不用重传丢失的包。

4.2.6 a=ssrc

SSRC(Synchronization Source,同步源标识)是媒体源的唯一标识,每一路媒体流都有唯一的SSRC来标识。

4.2.7 a=setup

格式:a=setup:<role>

用来设置使用DTLS协议时通信双方的角色。role包括:active(客户端)、passive(服务端)和actpass(既可以是客户端又可以是服务端,由另一端决定)。

一般情况下,第一个加入房间的终端默认为actpass,后面加入的终端为active。

4.2.8 a=ice-ufrag和a=ice-pwd

用于验证WebRTC客户端是否有效。通信双方可以从彼此的SDP中获取对方的ice-ufrag和ice-pwd信息,用这两个信息来验证用户的合法性。

4.2.9 a=fingerprint

用于验证加密证书的有效性。通过DTLS协议交换证书前,各端会先给各自的证书生成一个指纹(fingerprint),将指纹放到SDP中通过信令交换给对方。通过DTLS协议交换证书后,双方拿到证书重新生成指纹跟SDP中的指纹对比是否一致。

4.2.10 a=extmap

表示RTP Header扩展映射表,该属性在RFC 8285中做了详细说明。RTP的扩展头是以32位的整数倍增加的,即每个扩展头最小是4个字节。

格式:a=extmap:<value> <URI> <extensionattributes>

4.2.11 a=rtcp-fb

用来描述服务质量。在WebRTC中,rtcp-fb(rtcp feedback)有两层含义:一是指RTCP消息中专门反馈信息的一类消息;二是指SDP中使用的"a=rtcp-fb"属性,该属性可以用来设置WebRTC终端支持哪些rtcp feedback消息。

4.3 WebRTC的安全机制

4.3.1 应用级防护

用户在使用音视频通信产品时,一般要先进行注册,然后通过用户名/密码的方式登录到应用系统,这一级别的防护称为应用级防护,不属于WebRTC范畴。

4.3.2 信令级防护

用户通过第一级防护后,可以获得WebRTC信令服务器的地址,通过信令服务器进行媒体协商。媒体协商成功后,通信双方可以从彼此的SDP中获取对方的用户名/密码,即ice-ufrag和ice-pwd信息,用这两个信息来验证用户的合法性。

通信双方彼此发送STUN Binding请求(携带ice-ufrag和ice-pwd),当对方收到请求后,验证请求中的ice-ufrag和ice-pwd与自己SDP中的是否一致。

4.3.3 媒体数据加密

当二级防护通过后,通信双方还会使用DTLS协议彼此交换证书,证书中保存的最重要的信息就是公钥。例如ClientA向ClientB发送媒体数据,ClientA用ClientB的公钥对数据加密,然后再打包成SRTP发送给ClientB。ClientB使用自己的私钥将加密的数据解密。

4.4 PlanB与UnifiedPlan

目前WebRTC中的SDP包含PlanB和UnifiedPlan两种规格。PlanB由标准SDP演化而来,UnifiedPlan则是代替PlanB的SDP新规格。

它们之间最大的区别是:

在PlanB规格中只有两个媒体描述,即音频媒体描述(m=audio......)和视频媒体描述(m=video......),如果要传输多路视频需要通过SSRC来区分。

在UnifiedPlan中可以有多个媒体描述,如果要传输多路视频可将其拆成多个视频媒体描述(多行m=video......)。

4.5 ORTC

ORTC(Object Real-Time Communication)为开发基于WebRTC的应用程序提供了强大的API,其底层不再使用SDP,同时不再需要Offer/Answer机制,而是将原来SDP中的内容分别放到Sender、Receiver、Transport对象中,通过对象完成之前的工作。

ORTC的推出对WebRTC来说是一场重大变革,很多WebRTC的概念都会消失,比如WebRTC的对象RTCPeerConnection在ORTC中将不再存在。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱学习的程序媛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值