mediasoup-demo 多方通信SDP协商分析

1. mediaoup SDP协商方式

参会者加入房间,创建一个room client的时候,会创建对应的两个RTCPeerConnection,一个RTCPeerConnection(sendonly)负责发送自身的流 ,一个RTCPeerConnection (recvonly) 接受其他客户端的流。

推流端SDP协商:room client 假如确定推送自身的音视频数据,sendonly RTCPeerConnection 会生成 offer SDP 给mediasoup ,mediasoup 会检查这个 Offer 中的媒体特性。

收流端SDP协商:mediasoup 会生成 Offer SDP (UnifiedPlan格式) 给参会者的 recvonly RTCPeerConnection ,这个offer SDP 包含会议中的其他参与者的音视频流和其他信息,如果没有人则没有 SSRC。

这种方式的好处是其他客户端加入,以及流的变更(比如关闭视频打开视频时),都可以使用 reoffer,也就是统一由mediasoup 发起新的 Offer给参会者的 recvonly RTCPeerConnection,mediasoup 和 room client 的交互模式只有一种。

2.推流端 offer SDP

这是参与者推流端 offer SDP,参与者声明了自己的音频,视频以及webrtc-datachannel 的参数。视频推送采取了simulcas的方式,会推送rid:r0 rid:r1 rid:r2 三种视频流。

v=0
o=- 4949866233914119598 4 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 2
a=extmap-allow-mixed
a=msid-semantic: WMS 6d0c4361-dfac-4322-963e-03799f367ac1
m=audio 55279 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 192.168.116.1
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:1482349121 1 udp 2122260223 192.168.116.1 55279 typ host generation 0 network-id 1
a=candidate:3473159702 1 udp 2122194687 192.168.0.92 55280 typ host generation 0 network-id 2
a=candidate:34015052 1 udp 2122129151 192.168.0.109 55281 typ host generation 0 network-id 3 network-cost 10
a=ice-ufrag:x/xC
a=ice-pwd:Sn4/N5sM6NZ6ehcVab7Tilc9
a=ice-options:trickle
a=fingerprint:sha-256 C0:9E:E7:5F:C7:67:9E:04:5A:F5:C7:D3:F2:3C:AC:58:09:63:50:BD:A1:38:AB:21:7F:EC:29:C0:05:16:E5:C5
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=msid:6d0c4361-dfac-4322-963e-03799f367ac1 7162b8c3-42c8-4317-9150-c2a91f73c3a9
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: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:1723963798 cname:gbeIEGnl4g4dBuPN
a=ssrc:1723963798 msid:6d0c4361-dfac-4322-963e-03799f367ac1 7162b8c3-42c8-4317-9150-c2a91f73c3a9
a=ssrc:1723963798 mslabel:6d0c4361-dfac-4322-963e-03799f367ac1
a=ssrc:1723963798 label:7162b8c3-42c8-4317-9150-c2a91f73c3a9
m=application 9 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 0.0.0.0
a=ice-ufrag:x/xC
a=ice-pwd:Sn4/N5sM6NZ6ehcVab7Tilc9
a=ice-options:trickle
a=fingerprint:sha-256 C0:9E:E7:5F:C7:67:9E:04:5A:F5:C7:D3:F2:3C:AC:58:09:63:50:BD:A1:38:AB:21:7F:EC:29:C0:05:16:E5:C5
a=setup:actpass
a=mid:1
a=sctp-port:5000
a=max-message-size:262144
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 121 127 120 125 107 108 109 35 36 124 119 123 118 114 115 116
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:x/xC
a=ice-pwd:Sn4/N5sM6NZ6ehcVab7Tilc9
a=ice-options:trickle
a=fingerprint:sha-256 C0:9E:E7:5F:C7:67:9E:04:5A:F5:C7:D3:F2:3C:AC:58:09:63:50:BD:A1:38:AB:21:7F:EC:29:C0:05:16:E5:C5
a=setup:actpass
a=mid:2
a=extmap:14 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:13 urn:3gpp:video-orientation
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:11 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://www.webrtc.org/experiments/rtp-hdrext/color-space
a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=msid:6d0c4361-dfac-4322-963e-03799f367ac1 8020bfdd-b4ff-4be7-a044-83be973e7aa6
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
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 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:121 rtx/90000
a=fmtp:121 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:120 rtx/90000
a=fmtp:120 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:35 AV1X/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=rtcp-fb:35 ccm fir
a=rtcp-fb:35 nack
a=rtcp-fb:35 nack pli
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
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=4d001f
a=rtpmap:119 rtx/90000
a=fmtp:119 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=64001f
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
a=rtpmap:114 red/90000
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000
a=rid:r0 send
a=rid:r1 send
a=rid:r2 send
a=simulcast:send r0;r1;r2

3.订阅端(接收端)offer SDP

这是参与者接收端 offer SDP,可以看到当前房间里有另外两位参与者推送了自身的音视频流,声明了自己的音频,视频以及webrtc-datachannel 的参数。并且其他参与者的视频推送都采取了simulcas的方式,会推送多种视频流。

v=0
o=mediasoup-client 10000 8 IN IP4 0.0.0.0
s=-
t=0 0
a=ice-lite
a=fingerprint:sha-512 4B:79:1A:69:24:D5:3D:E5:B7:C1:DD:96:2D:78:32:45:C2:24:F0:EF:22:41:03:16:40:63:4D:F2:AE:61:D9:29:CA:56:AE:EC:A9:0D:B9:8D:5A:57:8B:55:FE:3F:9B:51:4E:CD:D1:78:FB:16:F9:3C:E0:58:AC:D6:D0:74:0E:88
a=msid-semantic: WMS *
a=group:BUNDLE datachannel 0 4 probator 2 3
m=application 7 UDP/DTLS/SCTP webrtc-datachannel
c=IN IP4 127.0.0.1
a=setup:actpass
a=mid:datachannel
a=ice-ufrag:ytr4ewe9qz47vbmw
a=ice-pwd:czdy8ikrwhm51xcqx0ybhjt4pe3y2atz
a=candidate:udpcandidate 1 udp 1076302079 192.168.0.109 40000 typ host
a=end-of-candidates
a=ice-options:renomination
a=sctp-port:5000
a=max-message-size:262144
m=audio 7 UDP/TLS/RTP/SAVPF 100
c=IN IP4 127.0.0.1
a=rtpmap:100 opus/48000/2
a=fmtp:100 minptime=10;useinbandfec=1;sprop-stereo=1;usedtx=1
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=setup:actpass
a=mid:0
a=msid:DDr3mDPiCuxGf6L9 22959f72-0ff9-429a-ac98-088bd0586fb7
a=sendonly
a=ice-ufrag:ytr4ewe9qz47vbmw
a=ice-pwd:czdy8ikrwhm51xcqx0ybhjt4pe3y2atz
a=candidate:udpcandidate 1 udp 1076302079 192.168.0.109 40000 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:867300900 cname:DDr3mDPiCuxGf6L9
a=rtcp-mux
a=rtcp-rsize
m=video 7 UDP/TLS/RTP/SAVPF 101 102
c=IN IP4 127.0.0.1
a=rtpmap:101 VP8/90000
a=rtpmap:102 rtx/90000
a=fmtp:102 apt=101
a=rtcp-fb:101 transport-cc 
a=rtcp-fb:101 ccm fir
a=rtcp-fb:101 nack 
a=rtcp-fb:101 nack pli
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:11 urn:3gpp:video-orientation
a=extmap:12 urn:ietf:params:rtp-hdrext:toffset
a=setup:actpass
a=mid:4
a=msid:DDr3mDPiCuxGf6L9 0a148ab9-ca15-4f3d-87c2-b0b7d4ed7ba5
a=sendonly
a=ice-ufrag:ytr4ewe9qz47vbmw
a=ice-pwd:czdy8ikrwhm51xcqx0ybhjt4pe3y2atz
a=candidate:udpcandidate 1 udp 1076302079 192.168.0.109 40000 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:536212837 cname:DDr3mDPiCuxGf6L9
a=ssrc:536212838 cname:DDr3mDPiCuxGf6L9
a=ssrc-group:FID 536212837 536212838
a=rtcp-mux
a=rtcp-rsize
m=video 7 UDP/TLS/RTP/SAVPF 127
c=IN IP4 127.0.0.1
a=rtpmap:127 VP8/90000
a=rtcp-fb:127 transport-cc 
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack 
a=rtcp-fb:127 nack pli
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:11 urn:3gpp:video-orientation
a=extmap:12 urn:ietf:params:rtp-hdrext:toffset
a=setup:actpass
a=mid:probator
a=msid:probator probator
a=sendonly
a=ice-ufrag:ytr4ewe9qz47vbmw
a=ice-pwd:czdy8ikrwhm51xcqx0ybhjt4pe3y2atz
a=candidate:udpcandidate 1 udp 1076302079 192.168.0.109 40000 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:1234 cname:probator
a=rtcp-mux
a=rtcp-rsize
m=audio 7 UDP/TLS/RTP/SAVPF 100
c=IN IP4 127.0.0.1
a=rtpmap:100 opus/48000/2
a=fmtp:100 minptime=10;useinbandfec=1;sprop-stereo=1;usedtx=1
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:10 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=setup:actpass
a=mid:2
a=msid:la69luRvgp49LMo7 66ace9a9-5c41-490c-b43e-8b22e7f1e203
a=sendonly
a=ice-ufrag:ytr4ewe9qz47vbmw
a=ice-pwd:czdy8ikrwhm51xcqx0ybhjt4pe3y2atz
a=candidate:udpcandidate 1 udp 1076302079 192.168.0.109 40000 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:801554891 cname:la69luRvgp49LMo7
a=rtcp-mux
a=rtcp-rsize
m=video 7 UDP/TLS/RTP/SAVPF 101 102
c=IN IP4 127.0.0.1
a=rtpmap:101 VP8/90000
a=rtpmap:102 rtx/90000
a=fmtp:102 apt=101
a=rtcp-fb:101 transport-cc 
a=rtcp-fb:101 ccm fir
a=rtcp-fb:101 nack 
a=rtcp-fb:101 nack pli
a=extmap:1 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:4 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:11 urn:3gpp:video-orientation
a=extmap:12 urn:ietf:params:rtp-hdrext:toffset
a=setup:actpass
a=mid:3
a=msid:la69luRvgp49LMo7 0bcc2b30-5b75-4cdc-a51a-32a9bfa2ef67
a=sendonly
a=ice-ufrag:ytr4ewe9qz47vbmw
a=ice-pwd:czdy8ikrwhm51xcqx0ybhjt4pe3y2atz
a=candidate:udpcandidate 1 udp 1076302079 192.168.0.109 40000 typ host
a=end-of-candidates
a=ice-options:renomination
a=ssrc:353285541 cname:la69luRvgp49LMo7
a=ssrc:353285542 cname:la69luRvgp49LMo7
a=ssrc-group:FID 353285541 353285542
a=rtcp-mux
a=rtcp-rsize

4. 参考链接

硬货专栏 |WebRTC SDP 详解和剖析

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值