1 整个SDP中,只能有一个会话描述,而媒体描述可以有多个.通常SDP包含个媒体描述:一个音频媒体描述,一个视频媒体描述。除会话描述是对整个SDP起约束作用以外,各媒体描述之间的约束互不影响。
1 v=0
2 o=- 3409821183230872764 2 IN IP4 127.0.0.1 3...
4 m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 ... 5...
6 a=rtpmap :111 opus /48000/2
7 a=rtpmap :103 ISAC /16000
8 a=rtpmap :104 ISAC /32000
2 SDP规范中,除定义了SDP的结构外,还对SDP的内容做了规定。规范总要求所有的描述都以行为单位,描述格式: <type> = <value>,其中<type>表示描述的目标,会话与媒体都有各自的<type>.会话包含的<type>有 v(protocol version ,协议版本)、o (owner/creator and session identifier,会话的创建者),s(session name,会话名)、t(time the session is active,会话时长)。媒体包含的<type) 主要是M(media,媒体),SAVPF,S是secure,F是feedback,AVP为AV Profile.
3 WebRTC为了实现音视频实时通信,对标准SDP做了很大调整,其整体结构·
4 媒体信息
属于标准SDP中的媒体描述内容,同时也是SDP中最核心的内容,其最重要的是”m=“ 行描述,在“m=”行中描述了媒体烈性、传输类型、payloadtype等信息,对于每种媒体数据(音频数据、视频数据)、可以选择多种编码器(opus、iLBC、H264)对其进行编解码。每种编码器的详细参数可以通过a= rtpmap 的属性进一步解释。
5 网络描述
webrtc其网络传输是由另外一套复杂的机制实现的,所以标准网络描述中c会被忽略。
a=group:BUNDLE 是用于知名那些媒体数据可以复用同一个传输通道。这里所谓的复用传输通道是指多种类型的媒体数据使用同一条网络链接传输数据,这样做可以节省ICE资源。
rtcp-mux属性用于知名rtcp是否与RTP复用同一端口,同样它也是出于结余ICE资源的目的
a=sendrecv属于用于指明媒体数据的传输方向是双向的(webrtc既可以接收数据,也可以发送数据)。在设置数据传输方向时,还可以选择sendonly\recvonly,inactive(不进行传输)
Ice-options属于用于指明webrtc收集ice candidate的策略。新版webrtc默认使用trikle-ICE模式,这样可以加快通信双方的链接速度。
a=extmap 指明rtp使用的扩展头。
Rtcp-resize 属性用于组合名缩减rtcp包的大小,具体缩减的时机是根据永不带宽大小来决定的。
6安全描述
安全描述的内容仅用于通信双方交换一些表要的信息。
7服务质量的描述
通过a=rtcp-fb属性设置。发起协商一方的offer中指明webrtc开启那些rtcp反馈,应答一方则在answer中确认是否真的开启对应的RTCP反馈。
8 m=<media> <port>/<numbers> <transport> <fmt>…
Transport 表示使用的传输协议
fmt表示媒体数据类型,一般为payloadtype列表,具体含义使用a=rtmpmap,属性做进一步阐述。
Udp/TLS/RTP/SAVFP: 传输时底层使用UDP,UDP上使用DTLS来交换证书,证书交换好时后,媒体数据由RTP进行传输,保证数据的可靠性。媒体数据(音视频数据)的安全性是由SRTP负责的,即对包中body部分进行加密。此外,使用RTCP的feedback机制对传输嘻嘻进行实时反馈(SAVPF),以便进行拥塞控制。
SAVFP:SRTP AUDIO VIDEO PROFILE FEEDBACK
9 音频媒体信息
1 m = audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 ... #对音频媒体的描述
2...
3 a=rtpmap :111 opus /48000/2 # 3678 行代码使用 a=rtpmap解释了payloadtype使用的编解码器及其参数是什么 采样率48000 通道数2
4 a=rtcp -fb:111 transport -cc
5 a=fmtp :111 minptime =10; useinbandfec =1 # a=fmtp 指定了 payloadtype 的数据格式,音频格式最小10Ms 一帧,使用带内FEC
6 a=rtpmap :103 ISAC /16000
7 a=rtpmap :104 ISAC /32000
8 a=rtpmap :9 G722 /8000
10 视频媒体信息
1 m=video 9 UDP/TLS/RTP/SAVPF 96 ... 102 121 124 ...
2...
3 a=mid:1 #因为音频编号为0,如果有多个媒体,编号累加
4...
5 a=rtpmap :96 VP8 /90000 # 96 VP8 时钟频率90000,PT列表第一位,视频默认编码器。
6...
7 a=rtpmap :97 rtx /90000 # RTX 丢包重传
8 a=fmtp :97 apt =96 # APT( associated payload type) 的值为96 PT 97 是96的补充
9...
10 a=rtpmap :102 H264 /90000
11 ...
12 a=fmtp :102 level -asymmetry -allowed =1; packetization -mode =1; profile - level -id =42001f # 指明通信双方使用h264的 level是否要保持一致。 0 必须一致,1 可以不一致,packetization mode 打包模式 0单包 1 非交错包 2 交错宝。 0 和 1 用于低延时的实时通信领域 profile-level-id 由3部分组成。
13 a=rtpmap :121 rtx /90000
14 a=fmtp :121 apt =102
15 ...
16 a=rtpmap :124 red /90000 # PT =124 使用RED 对之前编码好的数据在进行RED处理,
17 a=rtpmap :119 rtx /90000 # PT =119 是PT=124 的重传 payloadtype
18 a=fmtp :119 apt =124
19 ...
11 SSRC与CANME
SSRC是媒体的唯一标识,ssrc-group 指明2个SSRC是有关联关系的,后一个SSRC是前一个SSRC的重传留。
12 planB 和 unifiedplan
webrtc SDP包括2种规格, plan B 和 unified plan 。 Planb 由标准SDP演化而来,而unifiedplan 则是代替planB的SDP新规格。unifiedplan SDP描述,在多路视频流的情况下,会有多的m=videox.
13 a=ice-ufra: 和 a=ice=pwd,描述了ICE连接过程中使用的用户名和密码,这两个信息是为了防止ICE连接过程被攻击。