WebRTC之SDP


SDP(Session Description Protocol)

它是一种信息描述标准,本身不属于传输协议,但是可以被其他传输协议用来交换必要条件
sdp 就是webrtc用来告诉对方 自己支持哪些编解码,跟对方进行协商的
webrtc两端其实是无法知道对方的存在的,还是需要经过服务器进行中转,来告诉对方,我支持什么协议,对方支持什么协议

SDP规范

会话层
会话名称与目的
会话的存活时间
媒体层
1、媒体格式
2、传输协议
3、传输ip和端口
4、媒体负载类型

Seesion Description
v= protocol version
o= owner/create and session identifier
s =session name
c = conn info - optional if included at session - level
a= zero or more session attribute lines

Media Description
m= media name and transport address
c = conn info
b = bandwidth information
a= zero or more session attribute lines

一些重要的字段

version 必选
v=0 SDP的版本号
session name 必选
s = 会话名字 s- 表示忽略会话名字

Origin/Owner 必选

o = <username><sesssion id><version> <network type> <address type><address>
0= -87878978988789 2 IN IP4 127.0.0.1

Connection Data 可选

c=<network type> <address type> <connection address>
c=IN IP4 0.0.0.0

Media Announcements 必选

m=<media>  <fmt/payload type list>
m=audio 1024 UDP /TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 126

Suggested Attributes 可选

a= <TYPE>或 a=<TYPE> :<VALUE>
a =framerate:<帧速率>

rtpmap 可选

a=rtpmap: <fmt/payload type> / [/]

例子:a=rtpmap:103 ISAC/16000

a=fmtp: <format/payload type> parameter s

例子:a=fmtp:103 apt=106

举个例子

//版本号
V=0
起源  网络  协议  地址
0=T 4124882389307713477 2 IN IP4 127.0.0 .1
名字
S=-
时间
t=0 0
以上就是会话层


属性 视频  
a=group: BUNDLE 0 
媒体流id               
a=msid-semantic: WMS D0Qg6FLGrndzIV29USeoRLpmTS7L63AvyCp
媒体信息  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
连接数据  
C=IN IP4 0.0.0.0
rtcp 描述
a=rtcp:9 IN IP4 0.0.0.0
安全性的描述
a=ice-ufrag:CTgt 
a=ice-pwd:mGdhFvyq+YOc/7AVe+3ySYek 
a=ice-options:trickle
a=fingerprint: sha-256 68:79:32:0A:D6:85:81:AF:63:A7:AA:88:2B:3B:DE:71:18:9B:12:5F:4B:60:1B:19:1D:55:09:0E:79:31:38:ED
既可以服务也可以客户端 
a=setup:actpass 
a=mid: 0 
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset 
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation 
a=extmap: 5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01 
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07
a=extmap:9 urn:ietf:params: rtp-hdrext: sdes:mid a=sendrecv
a=msid: D0Qg6FLGrndzIV29USeoRLmTS7L63AvyCp 5b3eb697-b4de-4846-8bc8-304e11971475


多路复用
a=rtcp-mux 
丢包相关
a=rtcp-rsize
a=rtpmap: 96 VP8/90000 
a=rtcp-fb:96 goog-remb 
a=rtcp-fb:96transport-cc 
a=rtcp-fb:96 ccm fir 


a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/900 00
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000 
a=rtcp-fb:98 goog-remb 
a=rtcp-fb:98 transport-cc 
a=rtcp-fb:98 cm 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 H264/90000 
a=rtcp-fb:100 goog-remb 
a=rtcp-fb:100 transport-cc 
a=rtcp-fb:100 cm fir 
a=rtcp-fb:100 nack 
a=rtcp-fb: 100 nack pli I
a=fmtp: 100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4200 1f 
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 c cm fir
a=rtcp-fb :102 nack

一般web 喜欢用socket io来实现 sdp的中转,socket io理论上就像一个聊天室一样,主要是中转信息一下


  TOC