WebRTC SDP协议--新属性

一 Plan B、Unified Plan

Unified Plan:每路视频流都有一个m=video的描述。比如:有2路视频,有2个m=video。

Plan B:无论几路流,只有1个m=video。
描述不了的情况:ssrc对应的编码格式不同,一个H264、一个H265,放到一个m描述就有问题。

二 对着SDP说明新属性

v=0
o=- 6992417117692732357 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1 //audio/video port复用
a=extmap-allow-mixed
a=msid-semantic: WMS stream_id
m=audio 9 RTP/SAVPF 111 110
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:2Jrb
a=ice-pwd:gznCKn0Tjgu0ay5iR7WCC+y4
a=ice-options:trickle
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=sendrecv
a=msid:stream_id audio_label
a=rtcp-mux
a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:kF0nQ4g5T03l1rSf5TQdiXio6yW2KhKzAQZT/9B9
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:110 telephone-event/48000
a=ssrc:1419901729 cname:+DmWMCBQEJjcBeC0
a=ssrc:1419901729 msid:stream_id audio_label
a=ssrc:1419901729 mslabel:stream_id
a=ssrc:1419901729 label:audio_label
m=video 9 RTP/SAVPF 96 97 98 99 100 101 102 103 104 105 106 35
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:2Jrb
a=ice-pwd:gznCKn0Tjgu0ay5iR7WCC+y4
a=ice-options:trickle
a=mid:1
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=sendrecv
a=msid:stream_id video_label
a=rtcp-mux //rtp rtcp复用
a=rtcp-rsize //减少rtcp使用的流量
a=crypto:0 AES_CM_128_HMAC_SHA1_80 inline:kF0nQ4g5T03l1rSf5TQdiXio6yW2KhKzAQZT/9B9
a=rtpmap:96 H264/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=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 H264/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 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
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 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
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=0;profile-level-id=42e01f
a=rtpmap:103 rtx/90000
a=fmtp:103 apt=102
a=rtpmap:104 red/90000
a=rtpmap:105 rtx/90000
a=fmtp:105 apt=104
a=rtpmap:106 ulpfec/90000
a=rtpmap:35 flexfec-03/90000
a=rtcp-fb:35 goog-remb
a=rtcp-fb:35 transport-cc
a=fmtp:35 repair-window=10000000
a=ssrc-group:FID 3793049148 2533540925 //ssrc, 后面是前面的重传流
a=ssrc-group:FEC-FR 3793049148 3529981269
a=ssrc:3793049148 cname:+DmWMCBQEJjcBeC0
a=ssrc:3793049148 msid:stream_id video_label
a=ssrc:3793049148 mslabel:stream_id
a=ssrc:3793049148 label:video_label
a=ssrc:2533540925 cname:+DmWMCBQEJjcBeC0
a=ssrc:2533540925 msid:stream_id video_label
a=ssrc:2533540925 mslabel:stream_id
a=ssrc:2533540925 label:video_label
a=ssrc:3529981269 cname:+DmWMCBQEJjcBeC0
a=ssrc:3529981269 msid:stream_id video_label
a=ssrc:3529981269 mslabel:stream_id
a=ssrc:3529981269 label:video_label

跟sip的sdp、rtsp sdp语法一样的就不叙述了。
1 a=group:BUNDLE 0 1 //audio/video port复用

2 a=rtcp-mux //端口复用,rtp和rtcp是同一个

3 m=audio 9 RTP/SAVPF 111 110
SAVPF:音视频加密了,不加密是AVPF。

4 一大堆RTP扩展头,主要是transport-wide-cc。
a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01

5 支持那些rtcp-fb:nack等。

6 payload 96的重传流是97,96的ssrc是3793049148,97是2533540925。关键词是ssrc-group:FID。
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=ssrc-group:FID 3793049148 2533540925

7 fec的payload 35,ssrc是3529981269
a=rtpmap:35 flexfec-03/90000
a=ssrc-group:FEC-FR 3793049148 3529981269

8 simulcast
见这个文章:添加链接描述

9 m=application,DataChannel用的。

10 视频属性说明
level-asymmetry-allowed=1—允许h264 level等级不同,指main、high那些。
packetization-mode: RTP+H264/H265打包方式,范围0-2。
0–NAL、1–非交错、2–交错,隔行扫描。
单个NALU的长度小于MTU大小的包,一般采用单一NAL模式。
非交错:Type是[1-23, 24, 28]、STAPA是24,FU-A是28。
没看到=2的。

你可能感兴趣的:(webrtc,webrtc)