会话描述协议-SDP

article/2025/9/23 13:02:49

目录

一. 前言

二. 标准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,并开启 inbandfec 功能

三. 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 源码剖析


http://chatgpt.dhexx.cn/article/hRLhqMyQ.shtml

相关文章

h264和h265视频流SDP描述详解

文章目录 1 SDP概述 2.SDP媒体描述极其扩展属性 2.1 m属性介绍 2.2 acontrol附加属性介绍 2.3 artpmap附加属性介绍 2.4 afmtp附加属性介绍 SDP&#xff08;Session Description Protocol&#xff09;会话描述协议&#xff0c;是一种用来描述信息格式的标准&#xff0c;它…

表格标签

表格标签 规则表格 不规则表格–跨行和跨列 表格的高级标签–标题标签和逻辑分区标签

Android实现Excel表格样式

原理描述&#xff1a; 想写来着&#xff0c;但是似乎描述不太清楚。效果图来着&#xff0c;没找到好的视频录制软件&#xff0c;直接上代码吧。 代码&#xff1a; 1、xml布局文件 自定义控件的包名删除了部分&#xff0c;需要重新导入自定义控件&#xff01;&#xff01;&a…

Apache POI 操作Excel表格使用详解 最全

1.POI结构与常用类 (1)POI介绍 Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 Microsoft Office文档的功能。 (2)POI结构说明 包名称 说明 HSSF 提供…

022_Table表格

1. Table表格例子 1.1. Table表格用于展示多条结构类似的数据, 可对数据进行排序、筛选、对比或其他自定义操作。 1.2. Table Attributes 参数 说明 类型 可选值 默认值 data 显示的数据 array 无 无 height Table的高度, 默认为自动高度。如果height为number类型…

java 导入导出excel表格

java 导入导出excel表格 业务上有需求上传excel表格并读取内容&#xff0c;本文记录一下该方法 表格导入 引入相应的工具包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.4.0&l…

python逻辑回归

出现函数重名问题 异常抛出 异常抛出 #逻辑回归测试 import pandas as pd from sklearn.linear_model import LogisticRegression as LR filename C:/Users/29463/OneDrive/桌面/bankloan.xls data pd.read_excel(filename) #print(data) x data.iloc[:,:8].values y data…

实现带标题的ListView

在一些项目中&#xff0c;往往有要求为ListView里的内容分类&#xff0c;比如按日期分类&#xff0c;就要把相同日期的项目放在一起。可以看一些示例图&#xff0c;会清楚一些&#xff1a; 以上根据标题来进行分类&#xff0c;实现代码如下&#xff1a; 首先是数据项的模型…

java操作excel表格详解

在日常工作中&#xff0c;对Excel工作表格的操作处理可是多的数不清楚&#xff0c;下面是java语言对其的操作&#xff0c;有需要的小伙伴可以参考下 使用场景 1、将用户信息导出为excel表格&#xff08;导出数据…) 2、将Excel表中的信息录入到网站数据库(习题上传…&#xf…

安卓表格框架-ExcelView

转载请标明来源&#xff1a;安卓表格框架-ExcelView_分享记录-CSDN博客 Github地址&#xff0c;欢迎star&#xff1a;https://github.com/September26/ExcelView 一.项目介绍 项目是仿照WPS中Excel的功能实现的&#xff0c;实现了显示&#xff0c;滑动&#xff0c;编辑等基本…

html表格打印填充分页,window.print()页面打印之表格内容分页填充进行分页打印

windwow.print()用于打印当前窗口的内容,很简便,可当内容特殊并且打印有特殊需求的时候就要绕个圈了。下面是需要打印的表格: 当数据量少的时候像上面的表格一样,中间的内容只有5条数据,打印出来在纸上会有空白,不太好。中间内容是不确定的可能几十条,可能上百条,这样循…

在线表格

在线表格案例 模仿的是腾讯文档 首先观察腾讯文档的表格效果&#xff0c;然后在构建出思路&#xff0c;开始编写代码 效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title>在线表格<…

Java获取word表格中的数据

前言: 有时系统中需要提取各种文件中的数据&#xff0c;比如做报表的系统中就常常与Excel表格数据做交互。做Excel报表数据时有选择POI实现的&#xff0c;但是POI功能也很单一&#xff0c;对于文档格式维护性差&#xff0c;最重要的是POI在操作word数据时显得力不从心&#xf…

HTML 表格元素

表格元素 在日常生活中&#xff0c;我们对表格已经非常熟悉了&#xff0c;表格的基本作用是用来存放数据&#xff0c;它是数据的二维容器&#xff0c;人们常常用它来记录财务数据、列车时刻表、电视节目单等。 大多数情况下&#xff0c;表格都是由列标题或行标题&#xff0c;…

Bootstrap3 表格样式

表格 HTML表格是数据的二维容器&#xff0c;它的基本作用是用来存放数据。表格能够清晰、直观地描述数据间的逻辑关系&#xff0c;如果借助CSS设计表格的样式&#xff0c;阅读数据将会变得更轻松。 表格结构包括众多标签&#xff0c;这些标签各司其职&#xff0c;共同完成二维…

数据库表格查询

1、数据库表示存储数据中所有数据的对象&#xff0c;在表中&#xff0c;数据按行和烈格式逻辑组织&#xff0c;类似于电子表格&#xff0c;数据库是SchoolMangeSystem&#xff0c;使用数据库表是SYS_Student&#xff0c;如下图&#xff1a; select字段列表&#xff0c;字段别名…

html中标题距离顶部距离,版式设计中标题间距的使用法则

主标题与副标题定义 主标题是文案的核心主旨&#xff0c;可以直接表达&#xff0c;也可以含蓄表达&#xff0c; 副标题是对对主标题意思的具体阐释&#xff0c;或者主标题意思的进一步延伸。 字距与行距 横向的字间距与纵向的行间距的关系&#xff1a; 请保持行间距的高度&…

表格解析 概览

表格解析发展至今&#xff0c;仍然是一项很年轻的研究领域&#xff0c;出现了大量解决方案&#xff0c;常用的技术包括&#xff1a;线检测、box检测、分割、多模态融合、GCN、img2seq。以下按我的理解梳理一下表格解析各个流派&#xff0c;从中了解这项任务背后所采用的技术。在…

5.让表格的标题在滚动表格时一动不动

一、冻结首行首列 处理数据量较大的表格时&#xff0c;向下拖动滚动条&#xff0c;表格的标题栏就不见了&#xff0c;用户在查看数据时&#xff0c;需要来回拖动滚动条才能看到标题&#xff0c;那么是否可以将表格设置成无论怎样滚动表格&#xff0c;标题都始终显示呢&#xf…

python表格控件_python表格控件

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! pyqt5表格控件qtableview简介在通常情况下,一个应用需要和一批数据进行交互,然后以表格的形式输出这些信息,这时就需要用到qtableview类了,在qtableview中可…