WebRTC CreateOffer 分析
1. CreateOffer 的目的
WebRTC 主要用于 peer 之间音视频通讯,而通讯前需要协商一些参数,比如编解码器、传输协议等。
所以CreareOffer 的目的就在于搜集本地相关参数,用于初始化一次 session.
2. CreateOffer 主要收集了哪些信息
a. 要传输什么:即媒体相关信息,主要是 audio、video、data,以及相应支持的参数;
b. 怎么传输:即传输地址、策略、协议等;
3. Offer 如何交换
WebRTC 中 Offer 及与之对应的 Answer 都通过信令服务器使用 SDP 交换。
SDP:Session Description Protocol 会话描述协议,广泛用于多媒体会话中会话信息的描述,它定义了会话描述的规范、语义,并不限制传输层协议。
由于 SDP 协议需要支持各种异构的终端(如PC、电话等)、异构的网络、异构的系统等,所以其使用场景和交互定义相当复杂,建议先了解其基础规范:RFC4566
附:WebRTC 中,各场景下 SDP 交互示例:WebRTC中的SDP
4. Offer 长啥样
由于 SDP 是一个纯文本协议,且以行为组织单位,所以一个 Offer 其实就是一个多行字符串。
一个包含 audio、video、data 的 Offer 示例:
v=0
o=- 139014573241466234 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=msid-semantic: WMS stream_id
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Ysdw
a=ice-pwd:R2xJhQfg5pS3D+zt9g/IvB1V
a=ice-options:trickle
a=fingerprint:sha-256 81:81:2F:DE:C5:FD:42:FB:DD:A8:3C:05:94:60:56:A2:D6:BC:72:59:39:C9:27:6E:43:B6:12:92:F9:1E:19:1B
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:13 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:14 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendrecv
a=msid:stream_id audio_label
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:102 ILBC/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:2221963028 cname:jmpt/WDLtG9Ys2lu
a=ssrc:2221963028 msid:stream_id audio_label
a=ssrc:2221963028 mslabel:stream_id
a=ssrc:2221963028 label:audio_label
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 124 125
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:Ysdw
a=ice-pwd:R2xJhQfg5pS3D+zt9g/IvB1V
a=ice-option