webrtc入门三-sdp

235 阅读3分钟

引言:

此部分接上文,也分两部分,

第一部分,sdp协商中的字段的解释;

第二部分,信令流转过程主流程。


正文:

一、sdp协商中的字段的解释

从上文的本地回环开始,接下来我们把PeerConnection的单机的流程,扩展成通过信令服务器和ice服务器的流程。当然,像solar工程的就是STUN和TURN二者合一的,合称speedyAgent。

我们先用solar工程中实际的sdp来看看主要内容,重要的内容后有注释。

下面是一个receiver的header:

v=0
o=- 6414873236781647848 2 IN IP4 127.0.0.1//session id / session version / nettype IN is internet // address type / unicast-address
s=- //session name
t=0 0 //timming start and stop time for a session
a=group:BUNDLE a #mids#
a=msid-semantic: WMS empty #stream_ids#
m=audio 9 RTP/SAVPF 111 // media descriptions:media (defined are audio\video\text\application\message) /port / proto(udp 、 RTP/AVP、RTP/SAVP) / fmt (media format description)
c=IN IP4 0.0.0.0 //connection data 
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:#ice-ufrag# // ice user name
a=ice-pwd:#ice-pwd# //
a=ice-options:trickle renomination
a=mid:a
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendonly//others : recvonly\sendrecv
a=msid:empty a
a=rtcp-mux
a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:#inline#//SRTP default AES cipher :https://datatracker.ietf.org/doc/html/rfc4568#section-6.2.1
a=rtpmap:111 opus/48000/2 //rtpmap:palyload type encodeing name /clock rate / encoding parameters  Opus的采样率支持:8000,12000,16000,24000,48000 这几种
a=fmtp:111 minptime=60;useinbandfec=1;maxaveragebitrate=24000;usedtx=1;stereo=0;sprop-stereo=0//maxaveragebitrate 最大码流24kb /stereo : 0单声道,1双声道,双声道一般用于传音乐
a=ssrc:1234 cname:47T44kZCuiXSY7k9
a=ssrc:1234 msid:empty a
a=ssrc:1234 mslabel:empty
a=ssrc:1234 label:a

下面是一个receiver的media:

m=audio 9 RTP/SAVPF 111
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:#ice-ufrag#
a=ice-pwd:#ice-pwd#
a=ice-options:trickle renomination
a=mid:#mid0#
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendonly
a=msid:#stream_id# #track_id0#
a=rtcp-mux
a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:#inline#
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=60;useinbandfec=1;maxaveragebitrate=24000;usedtx=1;stereo=0;sprop-stereo=0
a=ssrc:#ssrc# cname:47T44kZCuiXSY7k9
a=ssrc:#ssrc# msid:#stream_id# #track_id0#
a=ssrc:#ssrc# mslabel:#stream_id#
a=ssrc:#ssrc# label:#track_id0#
m=video 9 RTP/SAVPF 102 122
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:#ice-ufrag#
a=ice-pwd:#ice-pwd#
a=ice-options:trickle
a=mid:#mid1#
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: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=sendonly
a=msid:#stream_id# #track_id1#
a=rtcp-mux
a=rtcp-rsize
a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:#inline#
a=rtpmap:102 H264/90000
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=42e01f
a=rtpmap:122 rtx/90000
a=fmtp:122 apt=102
a=ssrc-group:FID #video-ssrc# #rtx-ssrc#
a=ssrc:#video-ssrc# cname:O2u/dZl1c85Kuu/f
a=ssrc:#video-ssrc# msid:#stream_id# #track_id1#
a=ssrc:#rtx-ssrc# cname:O2u/dZl1c85Kuu/f
a=ssrc:#rtx-ssrc# msid:#stream_id# #track_id1#

具体字段的意义在这里有详细说明:datatracker.ietf.org/doc/html/rf…

WebRTC中默认是采用Opus编码,Opus编码是由silk编码和celt编码合并在一起,silk编码是由skype公司开源的一种语音编码,特别适合人声,适合于Voip语音通信。celt和mp3,aac类似,适合于传输音乐。