前言
本来想一行行解析 SDP 信息,并附上自己的理解和实例讲解,最后按章网上的资料过了一遍,最后也不是很懂,只是对 SDP 信息有个大致的了解,只能先输出一个学习笔记,后续先学习其他知识,理解更深刻后再重新整理一篇文章。
虽然没有整理出自己的理解,但是过一遍还是很有收获,最起码再拿到 SDP 信息大致有哪些内容,如何接卸有一个具体的概念。
知乎上的这篇 《WebRTC:会话描述协议SDP》 文章讲解的很好,拯救了我这种需要靠谷歌翻译看 RFC 文档的人,最后还是要看各种 RFC 文档,SDP 扩展的信息太多,分散在不同的 RFC 文档中,有些还是需要去看原文。
前两天写 《RTCPeerConnection 配置详解之 iceTransportPolicy》 这篇文章时正好有实际生成的 SDP 信息,参考 《WebRTC:会话描述协议SDP》 和 RFC2327 进行解析。
下面是 createOffer
返回的完整 SDP 信息
v=0
o=- 5247939015171769789 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE 0 1
a=extmap-allow-mixed
a=msid-semantic: WMS mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU
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:7+eD
a=ice-pwd:3+VGTgzV7gkUlIdpnWAkWqBo
a=ice-options:trickle
a=fingerprint:sha-256 BA:A3:B8:06:91:1D:69:7A:C9:46:58:B1:A7:A5:E1:C6:F7:16:86:71:71:8F:2C:27:D9:95:89:FA:7A:A7:FA:79
a=setup:actpass
a=mid:0
a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 urn:3gpp:video-orientation
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 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:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 72421008-3d5b-41ca-b4c8-50a0ed51a76b
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=ssrc-group:FID 380787905 4099067239
a=ssrc:380787905 cname:VY2dNUk0w4Gmvv8S
a=ssrc:380787905 msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 72421008-3d5b-41ca-b4c8-50a0ed51a76b
a=ssrc:380787905 mslabel:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU
a=ssrc:380787905 label:72421008-3d5b-41ca-b4c8-50a0ed51a76b
a=ssrc:4099067239 cname:VY2dNUk0w4Gmvv8S
a=ssrc:4099067239 msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 72421008-3d5b-41ca-b4c8-50a0ed51a76b
a=ssrc:4099067239 mslabel:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU
a=ssrc:4099067239 label:72421008-3d5b-41ca-b4c8-50a0ed51a76b
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 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:7+eD
a=ice-pwd:3+VGTgzV7gkUlIdpnWAkWqBo
a=ice-options:trickle
a=fingerprint:sha-256 BA:A3:B8:06:91:1D:69:7A:C9:46:58:B1:A7:A5:E1:C6:F7:16:86:71:71:8F:2C:27:D9:95:89:FA:7A:A7:FA:79
a=setup:actpass
a=mid:1
a=extmap:14 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=sendonly
a=msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 0986d5d3-0703-4003-b37e-8d899f0a69de
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:1580989886 cname:VY2dNUk0w4Gmvv8S
a=ssrc:1580989886 msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 0986d5d3-0703-4003-b37e-8d899f0a69de
a=ssrc:1580989886 mslabel:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU
a=ssrc:1580989886 label:0986d5d3-0703-4003-b37e-8d899f0a69de
SDP 解析
Line 1
v=0
协议版本号: v=
Line 2
o=- 5247939015171769789 2 IN IP4 127.0.0.1
会话发起者
o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
- 用户名:空
- 会话 id:5247939015171769789(规范建议使用 NTP 的时间戳)
- 会话版本: 2
- 网络类型:IN(
IN
表示Internet
) - 地址类型:IP4
- IP 地址:127.0.0.1
Line 3
s=-
会话名,-
表示为空,这个字段 SDP 中必须有且只能有一个
Line 4
t=0 0
会话的开始、结束时间
- 开始时间:0 (表示会话一直是活跃的)
- 结束时间:0 (会话没有结束的边界,永久有效)
Line 5
a=group:BUNDLE 0 1
音频、视频的传输采取多路复用,通过同一个 RTP 通道传输音频、视频。
Line 6
a=extmap-allow-mixed
允许混合使用一字节和两字节 RTP 报头扩展,参考下面两个文档:
从 Chrome M89 版本之后默认情况下提供 extmap-allow-mixed
SDP 中含有 extmap-allow-mixed 会导致 Chrome M71 之前版本出现 SDP 协商失败问题
Line 7
a=msid-semantic: WMS mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU
WMS 是 WebRTC Media Stream 的缩写,a=msid-semantic 用来给 RTP 的媒体流进行分组,用于指定媒体流之间的关系。
msid(mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU)对应于 MediaStream 的 “id” 属性。
TODO: 需要实例验证一下。SDP 的信息中的 msid 与网页中哪个 MediaStream 的 id 一致,前端在调用接口时音视频 MediaStreamTrack 是单独添加的,理论上可以来自两个不同的 MediaStream,应该和前端获取的 MediaStream 没有关系才对。
这部分具体啥作用没看懂,先放着,等理解了再更新。
Line 8
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
媒体描述,SDP 可能同时包含多个媒体描述,格式如下:
m=<media> <port> <proto> <fmt> ...
- media: 媒体类型,可以是 video、audio、text、application、message 等,这里是 video
- port: 传输媒体流的端口,具体含义取决与使用的网络类型(在
c=
[Line 9]行中声明)和使用的协议(proto,下一个字段) - proto: 传输协议,UDP/TLS/RTP/SAVPF 表示用 UDP 传输 RTP 包,并使用 TLS 加密。
- fmt: 第四位开始都是媒体格式描述。
SAVPF中的 S 意为 secure,AVP 意为 AV profile,F 意为 feedback。
注意,这里面的 端口 9 后后面第九行的 c=
中的 ip 值 0.0.0.0 都是为了兼容,端口 9 是个特殊的端口,发送到改端口的消息会被简单的丢弃,见维基百科 Discard Protocol 说明。
fmt 的取值说明在 RTP payload formats
96–127 都是动态值,这些值代表的信息在 SDP 后面的信息里面有具体的说明,把这部分类容忽略掉以后,整个 SDP 信息一下就少了很多,没那么大压力了。
96
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
97
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
98
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
99
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
100
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
101
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
102
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
121
a=rtpmap:121 rtx/90000
a=fmtp:121 apt=102
127
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
120
a=rtpmap:120 rtx/90000
a=fmtp:120 apt=127
125
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
107
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
108
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
109
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
35
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
36
a=rtpmap:36 rtx/90000
a=fmtp:36 apt=35
124
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
119
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=124
123
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
118
a=rtpmap:118 rtx/90000
a=fmtp:118 apt=123
114
a=rtpmap:114 red/90000
115
a=rtpmap:115 rtx/90000
a=fmtp:115 apt=114
116
a=rtpmap:116 ulpfec/90000
Line 9
c=IN IP4 0.0.0.0
参考 Line 2 的解析,IN 指的是 Internet,IP4 指的是 IPv4,在 Line 8 的解析是了解到 0.0.0.0 是为了兼容性考虑
Line 10
a=rtcp:9 IN IP4 0.0.0.0
a=
是扩展 SDP 的主要手段,分为会话级和媒体级属性,在添加第一个媒体描述之前,传达的信息适合整个会议而不是单个媒体,Line 5-7 这三行都是会话级属性,媒体级属性用于添加有关媒体流的信息。
此行用来表示用来传输 RTCP 的地址和端口
Line 11
a=ice-ufrag:7+eD
和下一行中的 a=ice-pwd 信息用于 ICE 协商过程中的安全验证信息。
TODO: 验证 ICE 抓包数据中是否有 ice-ufrag 和 ice-pwd 内容
Line 12
a=ice-pwd:3+VGTgzV7gkUlIdpnWAkWqBo
见 Line 11 行说明
Line 13
a=ice-options:trickle
使用 Trickle ICE,Trickle ICE 是 ICE 协议的扩展,ICE 代理以增量的方式发送和接受候选对象,而不是交换完整列表。
Line 14
a=fingerprint:sha-256 BA:A3:B8:06:91:1D:69:7A:C9:46:58:B1:A7:A5:E1:C6:F7:16:86:71:71:8F:2C:27:D9:95:89:FA:7A:A7:FA:79
表示dtls协商过程中需要的认证信息
TODO: dtls协商是哪个阶段的事情
ICE 连接检查在 DTLS 握手开始之前执行
Line 15
a=setup:actpass
a=setup 主要是表示 dtls 的协商过程中的角色的问题,谁是客户端,谁是服务器
- actpass 既可以是客户端,也可以是服务器
- active 客户端
- passive 服务器
Line 16
a=mid:0
当前媒体行的标识符,对应 Line 5 (a=group:BUNDLE 0 1
)中的标识
Line 17~27
a=extmap:1 urn:ietf:params:rtp-hdrext:toffset
a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:3 urn:3gpp:video-orientation
a=extmap:4 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:6 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:9 urn:ietf:params:rtp-hdrext:sdes:mid
a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id
a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id
a=extmap 用来扩展 RTP 头信息,此部分需要结合 RTP 抓包进行实例分析
webrtc.googlesource.com/src/+/refs/…
- a=extmap:1 urn:ietf:params:rtp-hdrext:toffset 使用 RFC 5450 中定义的时间戳偏移标头扩展
- a=extmap:2 www.webrtc.org/experiments… RTP 时间戳使用绝对时间
- a=extmap:3 urn:3gpp:video-orientation 允许将相机的方向告知另一侧,以便可以正常的显示
- a=extmap:4 www.ietf.org/id/draft-ho… 拥塞控制
- a=extmap:5 www.webrtc.org/experiments… 播放延迟
- a=extmap:9 urn:ietf:params:rtp-hdrext:sdes:mid 启用 RTP mid 报头扩展,Line 5 (
a=group:BUNDLE 0 1
)和 Line 7(a=msid-semantic: WMS mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU)必须要启用这个报头扩展才能正常工作
Line 28
a=sendonly
表示此会话仅用于发送视频,此参数受 RTCPeerConnection.createOffer()
参数影响
Line 29
a=msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 72421008-3d5b-41ca-b4c8-50a0ed51a76b
Line 30
a=rtcp-mux
Line 31
a=rtcp-rsize
Line 32~123
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
明确了 Line 8 中动态指定的 fmt 相关信息
Line 124~132
a=ssrc-group:FID 380787905 4099067239
a=ssrc:380787905 cname:VY2dNUk0w4Gmvv8S
a=ssrc:380787905 msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 72421008-3d5b-41ca-b4c8-50a0ed51a76b
a=ssrc:380787905 mslabel:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU
a=ssrc:380787905 label:72421008-3d5b-41ca-b4c8-50a0ed51a76b
a=ssrc:4099067239 cname:VY2dNUk0w4Gmvv8S
a=ssrc:4099067239 msid:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU 72421008-3d5b-41ca-b4c8-50a0ed51a76b
a=ssrc:4099067239 mslabel:mYoc2iUHPjJzLofS9GBRCjDxlGlYlwmGR7sU
a=ssrc:4099067239 label:72421008-3d5b-41ca-b4c8-50a0ed51a76b
ssrc用来对媒体进行描述,cname用来唯一标识媒体的数据源
a=ssrc-group:FID 380787905 4099067239
FID 表示同一时刻只用一种 codec,默认使用 SSRC 380787905,异常时使用 SSRC 4099067239 修复
Line 133~169
音频媒体参数,参考视频参数
参考资料
- WebRTC:会话描述协议SDP: zhuanlan.zhihu.com/p/75492311
- SDP(rfc2327):datatracker.ietf.org/doc/html/rf…
- 带注释的 WebRTC SDP 示例: tools.ietf.org/id/draft-ie…
- WebRTC会话描述协议(SDP)详解: segmentfault.com/a/119000002…
- Anatomy of a WebRTC SDP: webrtchacks.com/sdp-anatomy…
- WebRTC SDP 详解和剖析: zhuanlan.zhihu.com/p/296960792
今天的文章SDP 解析学习笔记分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/21235.html