WebRTC(十一) SDP

下面以一个sdp的实例来解释说明

会话层

v=0

v:版本号

o=- 2510751529507770530 2 IN IP4 127.0.0.1

0:owner, 
-:name,
2510751529507770530:sessionID, 
2:版本, 
IN:Internet, 
IP4:IP类型,  
127.0.0.1:IP地址

s=-

s:sesssionId, 
-:name

t=0 0

t:time 
0:起始时间
0:结束时间

a=group:BUNDLE 0

a:attribute
group:一组
Bundle:一组媒体流绑定到一起
0:视频流

a=msid-semantic: WMS UlWZUrYSZtB5e3Aiw4IBfp6eivcA9UWPSFvN

msid:media stream id
wms: webrtc media stream, 
UlWZUrYSZtB5e3Aiw4IBfp6eivcA9UWPSFvN:媒体流id的标识

媒体层

可以有多个m 此处只有一个v即video
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116

m:media
video:视频
9:端口号,不接受数据,不要向端口号传输
UDP/TLS/RTP/SAVPF:传输协议,底层是UDP协议,上层是RTP,TLS表示交换证书,SAVPF:Securate Audio Video Protocal Family
96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116:payload type

c=IN IP4 0.0.0.0

c:connection
IN:internet
IP4:网络类型
0.0.0.0:表示任意地址

a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:cHvA

ice-ufrag:链路验证有效性 会验证ufrag和pwd是否一直

a=ice-pwd:H2JJrFRuXwIKBsQ7Aa01M7kU

ice-pwd:链路验证有效性 会验证ufrag和pwd是否一直

a=ice-options:trickle

trickle:之前ice收集完成之后,才开始做sdp的交换,因为ice耗时比较长,所以改为了先进行sdp交换,
然后先用ice的任意通路,发现更好的通路再进行替换

a=fingerprint:sha-256 39:0E:67:55:E1:CE:9C:E3:65:5B:BB:EF:CE:DF:C1:59:27:95:3F:6F:A3:50:D8:B8:82:13:0E:FB:18:80:3D:86

fingerprint:256位的哈希值,TLS传输的校验,双方会校验fingerprint是否是合法的

a=setup:actpass

actpass:表示可以作为服务器端或者客户端。

a=mid:0
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset

extmap:external 扩展属性集合

a=extmap:13 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:12 urn:3gpp:video-orientation
a=extmap:2 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:8 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07
a=extmap:9 http://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:3 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv

sendrecv:send receive 既可以发送又可以接收

a=msid:UlWZUrYSZtB5e3Aiw4IBfp6eivcA9UWPSFvN af6eaad8-69c6-44fc-ad63-b5be8558a449

a=rtcp-mux

rtcp:传输反馈,比如丢包或带宽数据等
mux:复用,即为rtp与rtcp复用

a=rtcp-rsize

rsize:为了减少少rtcp包的,带宽足够时,反馈包括很多数据。由于有时候没有足够带宽,所以就用rsize来表示发送丢了多少包。

a=rtpmap:96 VP8/90000

96:payload type 
VP8:编码方式
90000:采样率

a=rtcp-fb:96 goog-remb

goog-remb:google 接收端带宽评估

a=rtcp-fb:96 transport-cc

transport-cc 传输端的贷款评估

a=rtcp-fb:96 ccm fir

ccm:codec cotrol message,编码控制的回馈消息
fir:完整的内部帧 即请求发送一个完整的I帧

a=rtcp-fb:96 nack

nack:告诉它有多少包是没有收到应答的,可以将没应答的包重新发一遍

a=rtcp-fb:96 nack pli

pli和fir类似 请求完整帧类型 picture lose

a=rtpmap:97 rtx/90000

rtx:丢包重传的通道

a=fmtp:97 apt=96

apt:表示9796关联的通道,当96有数据包丢包时候,需要重传,重传的payload type是97

a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 VP9/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 profile-id=2
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:122 rtx/90000
a=fmtp:122 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 H264/90000
a=rtcp-fb:108 goog-remb
a=rtcp-fb:108 transport-cc
a=rtcp-fb:108 ccm fir
a=rtcp-fb:108 nack
a=rtcp-fb:108 nack pli
a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:124 H264/90000
a=rtcp-fb:124 goog-remb
a=rtcp-fb:124 transport-cc
a=rtcp-fb:124 ccm fir
a=rtcp-fb:124 nack
a=rtcp-fb:124 nack pli
a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d0032
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=124
a=rtpmap:123 H264/90000
a=rtcp-fb:123 goog-remb
a=rtcp-fb:123 transport-cc
a=rtcp-fb:123 ccm fir
a=rtcp-fb:123 nack
a=rtcp-fb:123 nack pli
a=fmtp:123 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=640032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=123
a=rtpmap:114 red/90000

red:冗余丢包策略

a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000

a=ssrc-group:FID 790110816 3858362499

ssrc:标识一路流

a=ssrc:790110816 cname:IXwkxlCRc+MAD5lr

cname:channel name 和ssrc对应的名字

a=ssrc:790110816 msid:UlWZUrYSZtB5e3Aiw4IBfp6eivcA9UWPSFvN af6eaad8-69c6-44fc-ad63-b5be8558a449
a=ssrc:790110816 mslabel:UlWZUrYSZtB5e3Aiw4IBfp6eivcA9UWPSFvN
a=ssrc:790110816 label:af6eaad8-69c6-44fc-ad63-b5be8558a449
a=ssrc:3858362499 cname:IXwkxlCRc+MAD5lr
a=ssrc:3858362499 msid:UlWZUrYSZtB5e3Aiw4IBfp6eivcA9UWPSFvN af6eaad8-69c6-44fc-ad63-b5be8558a449
a=ssrc:3858362499 mslabel:UlWZUrYSZtB5e3Aiw4IBfp6eivcA9UWPSFvN
a=ssrc:3858362499 label:af6eaad8-69c6-44fc-ad63-b5be8558a449

你可能感兴趣的:(WebRTC)