目录

一. 前言

二. 标准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/32000m=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:版本 ID,每次会话描述信息修改,该值都会加一

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,并开启 FEC 功能

三. WebRTC的SDP

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

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

v=0      # 版本
# 用户名 会话ID SDP版本 网络类型 IPv4 网络地址
o=- 125529219034078926 2 IN IP4 127.0.0.1
s=-      # 会话名
t=0 0    # 起始时间 -> 结束时间# 表示0,1这一组媒体流绑定到一起,底层使用一个连接进行传输
a=group:BUNDLE 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(服务端)/actacvtive(客户端)
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 描述了支持的带宽评估算法等。

四. 其他

WebRTC CreateOffer 源码剖析

会话描述协议-SDP相关推荐

  1. 会话描述协议---SDP协议【详解】

    目录 一.SDP协议简介 二.SDP协议格式 三.会话描述参数 1.Version(必选) 2.origion(必选) 3.Session Name(必选) 4.Connection Data(可选) ...

  2. 流媒体专家(3)rtsp内嵌的会话描述协议sdp

    文章目录 一 概述 二 sdp规格 三 各个字段的描述 1. Version(必选) 2.origion(必选) 3.Session Name(必选) 4.Connection Data(可选) 5. ...

  3. SDP: Session Description Protocol(会话描述协议) (RFC2327)

    SDP: SessionDescription Protocol(会话描述协议) (RFC2327) 1概述 SDP也是MMUSIC工作组的一个产品,在MBONE内容中用得很多.其目的就是在媒体会话中 ...

  4. SDP: 会话描述协议(Session Description Protocol)

    会话描述协议(SDP)为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述. 会话目录用于协助多媒体会议的通告,并为会话参与者传送相关设置信息.SDP 即用于将这种信息传输到接收 ...

  5. 网络流媒体--SDP会话描述协议(RFC-4566)

    1.SDP协议简介 SDP(Session Description Protocol)是为了描述多媒体会话而设计的,主要用来描述会话通告,会话邀请或者其他形式的多媒体会话初始化.为了初始化多媒体会话, ...

  6. 【SIP教程】 SDP(Session Description Protocol)会话描述协议

    概述 SDP用来描述多媒体会话的应用层控制协议,为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述. 是一个基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛 ...

  7. 音视频SDP协议详解(描述会话的协议)

    前言 ①SDP协议是会话描述协议(Session Description Protocol)的缩写,是一种会话描述格式,一种描述流媒体初始化参数的格式,为描述多媒体数据而设计. 文末卡片领取音视频免费 ...

  8. 会话初始协议SIP与SDP简介

    SIP(Session Initiation Protocol,会话初始协议)是一个控制发起.修改和终结交互式多媒体(音视频.聊天.游戏等)会话的信令协议(RFC 3261).SIP是一个基于文本的协 ...

  9. 简单了解音视频传输协议SDP、RTP、RTMP、SIP等

    SDP 会话描述协议(SDP)为会话通知.会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述.参考RFC2327(Request For Comments(RFC),是一系列以编号排定的文 ...

  10. 会话初始协议---SIP协议【详解】

    目录 ​ 一.SIP协议简介 二.SIP消息的两种会话模式 1.Session Model 2.Pager Model 三.SIP消息体格式 1.请求行(request-line) 2.状态行(sta ...

最新文章

  1. mysql数据库断电_MySQL 数据库忽然断电会丢数据吗转载
  2. linux终端背景透明度设置,Ubuntu Terminal标签背景颜色设置
  3. 【面向对象】面向对象程序设计测试题2-Java基本语法测试题
  4. leetcode 61 python
  5. 2017.8.8 魔兽地图DotR 思考记录
  6. project不显示里程碑标志_在Project中设置里程碑
  7. 快速排序-超级详细代码注释!
  8. redis 包之间关系
  9. wechat实现微信聊天机器人
  10. Safari兼容IE
  11. 2022年了,微信透明头像怎么设置?不多说,安排
  12. 转:淘宝客搜索链接技巧首度分享
  13. glassfish配置错误问题
  14. spark中的转换算子和行动算子区别(transformations and actions)
  15. java集成极光推送实现Android的消息推送
  16. 关于Echarts的平均值线
  17. pip安装和使用 (Python)
  18. [朝花夕拾]一个菜鸟从高一到大二的作品整理
  19. 迈阿密色主题学科导航 HTML5静态开源
  20. java 分析类_java--分析简单java类与反射的联系

热门文章

  1. 联想ideaPad Z470安装黑苹果与Win双系统教程
  2. 发言倒计时器_演讲稿之演讲比赛专用倒计时器
  3. Win10 多出4个显示器无法删除的“通用非即插即用监视器”问题解决
  4. Python实现微信自动抠图换底助手
  5. SQL--“索引超出了数组界限”
  6. docker菜鸟入门
  7. matlab免疫算法求解配送中心选址问题
  8. TIA 和step 7硬件更新网址汇总
  9. 桌面高效便捷的多窗口调整管理工具 - AquaSnap
  10. JSON 数据类型转换工具