我是靠谱客的博主 可耐小熊猫,这篇文章主要介绍会话描述协议-SDP一. 前言二. 标准SDP规范说明三. WebRTC的SDP四. 其他,现在分享给大家,希望可以做个参考。

目录

一. 前言

二. 标准SDP规范说明

会话级描述

媒体级描述

三. WebRTC的SDP

会话描述

媒体信息描述

网络描述

安全描述

服务质量描述

四. 其他


一. 前言

        SDP(Session Description Protocol) 是一种通用的会话描述协议,例如在音视频通话前通话双方需要进行媒体能力协商,比如协商双方都可支持的编解码类型,交换候选地址等,因此通话前都会发送一个 SDP,描述自己的会话和媒体等信息。

二. 标准SDP规范说明

        标准 SDP 结构由会话级描述和多个媒体级描述组成,每条描述信息都是 key=value 的形式,key 可以为 v(版本),o(owner),s(会话),m(媒体信息),a(属性),c(连接)等,以如下的 SDP 会话描述信息说明各字段含义。

v=0
o=- 4007659306182774937 2 IN IP4 127.0.0.1
s=-
t=0 0 


m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
...
a=rtpmap:111 opus/48000/2 //对RTP数据的描述
a=fmtp:111 minptime=10;useinbandfec=1 //对格式参数的描述
...
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000

m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
...
a=rtpmap:96 VP8/90000
...

会话级描述

版本描述:v=<protocol version>,v=0 表示 SDP 版本号

来源描述:o=<username> <sessionid> <version> <network type> <address type> <address>

username:用户名

sessionid:会话 ID

version:会话版本,每次会话描述信息修改,该值都会加一

network type:网络类型,IN 表示 Internet

address type:地址类型,IP4 表示 IPv4

address:客户端 IP

会话描述:s=<session name>,session name 表示会话名称,当不关心会话名称时可以填 -

时间描述:t=<start time> <stop time>,描述会话的开始时间和结束时间,如果希望持久会话则都填充为 0

媒体级描述

媒体描述:m=<media> <port> <transport> <fmt list>

media:audio / video

port:端口,通常不会被使用

transport:传输协议描述,如 UDP/TLS/RTP/SAVPF

fmt list:媒体数据负载列表

属性描述:a=<type>:<value>,用于进一步描述媒体属性信息,例如:

a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encodingparameters>]

payload type:负载类型

encoding name:编码器名称,如 VP8,VP9,OPUS 等

clock rate:采样率

encodingparameters:编码参数,如音频的声道数信息

a=rtpmap:111 opus/48000/2,该设置表示 payload type=111 的数据类型为 opus,采样率为 48K,双声道。

a=fmtp:<payload type> <format specific parameters>

payload type:负载类型

format specific parameters:参数信息

a=fmtp:111 minptime=10;useinbandfec=1,例如该设置表示 payload type=111 的数据类型设置最小分包时间为 10ms,并开启 inbandfec 功能

三. WebRTC的SDP

        WebRTC 对标准 SDP 规范进行调整,按功能分成会话描述和媒体描述,媒体描述包含媒体信息,网络描述,安全描述,服务质量描述。

以如下 SDP 会话描述信息说明各字段含义。

v=0      # SDP版本
o=- 125529219034078926 2 IN IP4 127.0.0.1    # 用户名 会话ID 会话版本 网络类型 IPv4 网络地址
s=-      # 会话名
t=0 0    # 起始时间 结束时间


a=group:BUNDLE 0 1    # 表示0,1这一组媒体流绑定到一起,底层使用一个连接进行传输
a=msid-semantic: WMS EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4    # 媒体流标识

# 音频,端口是9(特殊含义),底层UDP,上层RTP,使用TLS加密,payload type list(111 103 104 9 0 8 106 105 13 110 112 113 126)
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           # WebRTC的媒体信息也按照标准添加了conn的信息,但是没有使用
a=rtcp:9 IN IP4 0.0.0.0    # RTCP采用的端口,IP地址
# 以下几个是加密认证相关的,ice-ufrag相当于账号,ice-pwd相当于密码
a=ice-ufrag:d/Bq
a=ice-pwd:LCr5D75zcEz79NVpIeMwy7Fh
a=ice-options:trickle
a=fingerprint:sha-256 5C:6A:7E:73:AE:3E:51:1F:C5:1A:C4:7B:09:82:D1:A1:24:0E:F2:E9:9D:2D:2E:BB:16:EC:07:60:99:9F:D9:ED
# actpass/actpassive/active
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=sendrecv  # 可以发送和接收
a=msid:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4 e98d20bd-a95d-4039-b4a7-0b0a274c781f
a=rtcp-mux   # RTP和RTCP复用同一端口
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:2728451063 cname:CrzhiObmsWXG+XzP
a=ssrc:2728451063 msid:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4 e98d20bd-a95d-4039-b4a7-0b0a274c781f
a=ssrc:2728451063 mslabel:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4
a=ssrc:2728451063 label:e98d20bd-a95d-4039-b4a7-0b0a274c781f

# 视频,端口为9(特殊含义),底层UDP,上层RTP,使用TLS加密,payload type list(96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116)
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:d/Bq
a=ice-pwd:LCr5D75zcEz79NVpIeMwy7Fh
a=ice-options:trickle
a=fingerprint:sha-256 5C:6A:7E:73:AE:3E:51:1F:C5:1A:C4:7B:09:82:D1:A1:24:0E:F2:E9:9D:2D:2E:BB:16:EC:07:60:99:9F:D9:ED
a=setup:actpass
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://tools.ietf.org/html/draft-ietf-avtext-framemarking-07
a=extmap:9 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:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4 aec72a07-57d7-4056-ae1f-82a08733eed2
a=rtcp-mux
a=rtcp-rsize  # 带宽不足时减少RTCP非关键包的发送
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         # 支持nack反馈丢包信息
a=rtcp-fb:96 nack pli     # 与ccm fir类似
a=rtpmap:97 rtx/90000     # 标识为重传包,使用的payload type不同
a=fmtp:97 apt=96          # payload type 97 关联 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:122 rtx/90000
a=fmtp:122 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:121 rtx/90000
a=fmtp:121 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: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=4d0032
a=rtpmap:120 rtx/90000
a=fmtp:120 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=640032
a=rtpmap:119 rtx/90000
a=fmtp:119 apt=123
a=rtpmap:114 red/90000     #冗余策略
a=rtpmap:115 rtx/90000     
a=fmtp:115 apt=114
a=rtpmap:116 ulpfec/90000  #FEC冗余
a=ssrc-group:FID 2209548469 3569917101
a=ssrc:2209548469 cname:CrzhiObmsWXG+XzP
a=ssrc:2209548469 msid:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4 aec72a07-57d7-4056-ae1f-82a08733eed2
a=ssrc:2209548469 mslabel:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4
a=ssrc:2209548469 label:aec72a07-57d7-4056-ae1f-82a08733eed2
a=ssrc:3569917101 cname:CrzhiObmsWXG+XzP
a=ssrc:3569917101 msid:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4 aec72a07-57d7-4056-ae1f-82a08733eed2
a=ssrc:3569917101 mslabel:EEZ1FKFsNMtehiuc7XvZm8krRnaIjJkszLK4
a=ssrc:3569917101 label:aec72a07-57d7-4056-ae1f-82a08733eed2

会话描述

        v,o,s,t 含义与 SDP 规范中的含义相同,不做赘述。

媒体信息描述

        媒体信息描述主要由 rtpmap,fmtp 说明,与 SDP 规范中的媒体描述含义相同,不做赘述。

网络描述

a=candidate 描述了候选地址信息

a=ice-lite 表示使用 lite-ice,不使用 full-ice(full-ice 表示双方都要进行媒体连接探测,lite-ice 表示不需要主动探测候选者地址,只被动响应 STUN binding response)

a=rtcp-mux 表示 RTP 与 RTCP 复用同一端口进行多路传输

a=extmap 描述了使用的 RTP 扩展字段信息

a=rtcp-rsize 表示带宽不足时减少 RTCP 非关键包的发送

安全描述

a=ice-ufrag 表示 ICE 用户名

a=ice-pwd 表示 ICE 密码,与 ice-ufrag 一同用于 ICE 认证

a=fingerprint 表示 DTLS 握手时的证书指纹

a=setup:(active/actpass) 表示 DTLS 时作为主动握手方还是被动连接方

服务质量描述

a=rtcp-fb 描述了与服务质量相关的特性,例如 nack 表示支持丢包重传,fir 表示支持关键帧请求, transport-cc,goog-remb 描述了支持的带宽评估算法等。

Anatomy of a SDP 该网站提供了一个 webrtc SDP 的示例值,并详细描述了 webrtc SDP 每一行的含义。

四. 其他

WebRTC CreateOffer 源码剖析

最后

以上就是可耐小熊猫最近收集整理的关于会话描述协议-SDP一. 前言二. 标准SDP规范说明三. WebRTC的SDP四. 其他的全部内容,更多相关会话描述协议-SDP一.内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部