SDP协议总结

article/2025/9/30 17:40:53

一、基本要求

1、SDP的表示

SDP(Session Description Portocol)会话描述协议,通常通过内容类型为"application/sdp"的MIME来表示。

2、媒体和传送信息

SDP可包括以下媒体信息:

  • 媒体类型(音频、视频等);
  • 传送协议(RTP/UDP/IP, H.320等);
  • 媒体格式(H264视频,AAC音频等);
  • 传输地址和端口;

二、语法内容

1、SDP编码

SDP完全是文本形式的,采样UTF-8(RFC 2044)编码的ISO 10646字符集。选用文本形式,是为了提高便携性和传送方式的多样性。由于声明会通过不可靠的方式来传送,或是被中间缓存服务器损坏,所以编码在设计时,就具有非常严格的顺序和格式规则,这样,即使存在会导致声明的格式异常的错误,也能轻易的检测出来并将其丢弃。

2、SDP语法结构

一个SDP会话描述由多个形式为<type>=<value>的文本行组成。
<type>是一个大小写敏感的字符。
<value>是一个结构化的文本串,它的格式由<type>决定,也是大小写敏感,除非有特定的字段另作定语。
=两边不能有白空格,一般是多个由单空格字符分割的字段,或者是一个任意格式的字符串。
一个会话描述包含一个会话级描述(应用于整个会话和所有媒体流)和多个可选的媒体级描述(仅应用于单个媒体流)。
一个声明包含一个会话级部分,并尾随零个或多个媒体级部分。会话级部分以v=行开头,紧跟着第一个媒体级部分。媒体级描述以m=开头,后跟下一个媒体描述,或者整个会话的结尾。会话级的值对所有的媒体来说是缺省的,除非媒体级部分定义了相同的字段值。

会话级描述(1个,以"v="行开头)
媒体级描述(0个或多个,以"m="行开头)

3、会话描述的文本行

每一个描述,有些行是必须的,而有些是可选的。但所有行必须严格按照表1、表2、表3中指定的顺序给出。固定顺序可以增强检错能力和降低解码要求。
在这里插入图片描述
如果声明中含有SDP解析器不能理解的type类型,SDP解析必须完全忽略这个声明。
属性机制a=是扩展SDP的基本途径。有些属性有特定的含义,会话必须忽略任何它不认识的属性。

3.1 协议版本(必选)

v=0
v=字段给出了SDP协议的版本。最小版本是0。

3.2 会话发起者(必选)

"会话发起者"行的语法格式如下:
o=<username> <sess-id> <serr-version> <nettype> <addrtype> <unicast-address>
共6个部分,每部分以单空格区分。
<username>始发主机用户名,如果始发主机不支持用户标识的概念,则该字段填“—”<username>中不能包含空格。
<sess-id>是一个数字串。建议使用时间戳以保证唯一性。
<sess-version>当前会话描述的版本号。如果会话数据做了修改,则这个会话的版本号要增加,具体做法取决于开发工具。建议但不强制要求使用时间戳。
<nettype>描述网络类型。目前先定义"IN",它表示互联网,其他值待定。
<addrtype>描述网络地址类型,这里先定义两种取值:"IP4""IP6"
<unicast-address>描述创建会话的主机地址。
总之,o=给出了这个版本会话描述的全球唯一标识。

3.3会话名(必选)

s=<session name>
s=字段描述会话名称,是基于文本的。每个会话描述中有且仅有一个s=字段,且不能为空。如果一个会话没有实际意义,可以这样表述:s=(通过一个空格来表示会话名称)。

3.4连接数据(可选)

c=<nettype> <addrtype> <connection-address>
一个会话描述必须在每个媒体描述中包含一个c=字段,或者必须包含一个会话级的c=字段。也可以是包含一个会话级的c=字段并在每个媒体描述中包含一个附加的c=字段,这种请求,对于相关的媒体,优先使用媒体描述中的取值。
<nettype> 网络类型,用"IN"表示互联网,将来也可能会定义其他值。
<addrtype>地址类型,目前只定义了"IP4""IP6"
<connection-address>IP地址

3.5时间设置(必选,至少1个)

t=<start-time> <stop-time>
t=字段明确了一个会话的开始时间和结束时间。
如果停止时间设成0,则会话是无下限的,但在会话开始前不会被激活;如果开始时间也是0,则认为会话永远存活。

3.6属性(可选,0个或多个)

a=<attribute>
a=<attribute>:<value>
属性是扩展SDP的基本方式。属性可以被定义为会话级,或者是媒体级,或者两者都有。
属性字段有两种形式:

  • 特定属性:它的格式为a=<flag>。这种属性表示会话的一个特写,如a=recvonly
  • 带值属性:它的格式为a=<attribute>:<value>,可以是自定义的属性。
    对属性的解析取决于所使用的媒体工具,收到一个不认识的属性,接收方可以忽略它。
3.7媒体描述(可选,0个或多个)

m=<media> <port> <proto> <fmt> ... 如果包含媒体描述,则必须包含该行。
<media> 媒体类型。目前定义的媒体类型有:audiovideoapplicationtextmessage,这个列表可能会扩展。
<port>媒体流传输端口。传送端口取决于c=字段中指明的网络及<proto>中指明的传输协议。其他媒体应用所使用的端口(如:RTCP端口,见RFC3605)可通过一定的算法推导出来,或者在一个单独的属性中规定(如:RFC
3605中定义的a=rtcp:)。一般RTP使用偶数端口,RTCP使用奇数端口(RTP端口+1),如果使用非连续端口,或者不按照奇偶规则来实现,则必须使用a=rtcp:属性描述。

4、SDP属性

下面列一些SDP属性。编程人员可以根据需要添加新的属性,所以下面列出来的并不是全部。仅列出常见的属性。
4.1 a=framerate:<frame rate>
它给出最大视频帧率,单位帧/秒。允许使用十进制带小数的值。它是媒体级的属性,只对视频媒体有意义。
4.2 a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encoding parameters>]
该属性用来将一个RTP净荷类型编号(在m=行使用的)映射到一个表示净荷格式的编码名称。此外,它还提供时钟频率和编码参数的信息。
虽然能够静态给出净荷格式分配净荷类型编号,但更多是通过a=rtpmap:进行动态分配。例如:采样16bit线程编码、采样率为16KHz的立体声是一种动态净荷类型,如果我们想用动态RTP/AVP净荷类型98来表示这种流,则为了对其编码,还需提高的附加信息如下:
m=audio 59935 RTP/AVP 98
a=rtpmap:98 L16/16000/2
对于音频流,<encoding parameters>表示音频信道的数量,如果信道数量为1且不需要附加的参数,则这个参数可以省略。
对于视频流,目前还没有规定编码参数。
4.3 a=fmtp:<format> <format specific parameters>
这个属性允许特定的格式参数能在SDP不能识别它们的前提下依然能够传递。这种格式必须是媒体定义的格式中的一种。

三、示例

下图是RTSP抓包中的SDP描述
RTSP抓包


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

相关文章

简单服务发现协议SSDP

SSDP:Simple Sever Discovery Protocol,简单服务发现协议是一种应用层协议&#xff08;常用于寻找upnp设备&#xff09;&#xff0c;此协议为网络客户提供一种无需任何配置、管理和维护网络设备服务的机制。此协议采用基于通知和发现路由的多播发现方式实现。协议客户端在保留的…

协议--SIP/SDP

参考资料 会话初始协议SIP与SDP简介完整SIP/SDP媒体协商概论-SIP/WebRTC概要 1. 什么是SIP 1.1 关于SIP通话的一个形象比喻 生活中&#xff0c;我们想要找一个人互相聊天&#xff0c;首先你到找到这个人、你的声音得传递到对方&#xff0c;对方能听到你的声音&#xff0c; …

SSDP 简单服务发现协议 .

http://blog.csdn.net/lilypp/article/details/6631951 cache network 网络 algorithm ext service SSDP 简单服务发现协议&#xff0c;是应用层协议&#xff0c;是构成UPnP&#xff08;通用即插即用&#xff09;技术的核心协议之一。它为网络客户端&#xff08;network client…

SSDP Protocol

SSDP 简单服务发现协议&#xff0c;是应用层协议&#xff0c;是构成UPnP&#xff08;通用即插即用&#xff09;技术的核心协议之一。它为网络客户端&#xff08;network client&#xff09;提供了一种发现网络服务&#xff08;network services&#xff09;的机制&#xff0c;采…

SDP协议详细介绍

SDP 协议分析 http://www.cnblogs.com/qingquan/archive/2011/08/02/2125585.html 一、SDP协议介绍 SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议&#xff0c;包括会话通知协议&#xff08;SAP&#xff09;、会话初始协议&#xff08;SIP…

SSDP 简单服务发现协议

SSDP 简单服务发现协议,是应用层协议,是构成UPnP(通用即插即用)技术的核心协议之一。它为网络客户端(network client)提供了一种发现网络服务(network services)的机制,采用基于通知和发现路由的多播方式实现。 SSDP多播地址:239.255.255.250:1900(IPv4),FF0x::C(…

设备发现协议SSDP实现

原理&#xff1a; 1.将socket加入239.255.255.250&#xff0c;端口 1900 2.客户端&#xff1a;通过设置setsockopt IPPROTO_IP,IP_ADD_MEMBERSHIP属性&#xff0c;可向ssdp组进行组播。 3.服务端&#xff1a;通过设置绑定239.255.255.250:1900进行数据接收&#xff0c;通过s…

wireshark-协议分析【初见】(NBNS协议,SSDP协议、IGMPv2)

写在前面 win7:192.168.2.150&#xff08;00-0c-29-CF-D3-0F&#xff09; kali:192.168.2.120&#xff08;00:0c:29:e7:1c:e5&#xff09; &#xff08;均使用的vmware虚拟机平台&#xff09; 该系列并不会太关注wireshark的用法&#xff0c;重点关注协议交换时数据包的情况。…

ssdp协议搜索GB28181设备

1、http协议和ssdp协议 ssdp协议近似于http协议&#xff0c;事实上&#xff0c;和http协议相似得地方就是他得协议内容&#xff0c;当然&#xff0c;我们要去除他得端口和d类地址。 为什么我在给其他员工或者面试得时候要他人深入一些&#xff0c;理解一下http协议&#xff0…

二叉树、红黑树

二叉树 遍历概念  所谓遍历(Traversal)是指沿着某条搜索路线&#xff0c;依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。  遍历是二叉树上最重要的运算之一&#xff0c;是二叉树上进行其它运算之基础。 遍历方案 1&#x…

图解红黑树及Java进行红黑二叉树遍历的方法

红黑树 红黑树是一种数据结构与算法课堂上常常提到但又不会细讲的树&#xff0c;也是技术面试中经常被问到的树&#xff0c;然而无论是书上还是网上的资料&#xff0c;通常都比较刻板难以理解&#xff0c;能不能一种比较直观的方式来理解红黑树呢&#xff1f;本文将以图形的方式…

算法 红黑树

红黑树 红黑树概述红黑树性质 红黑树的插入代码实现 红黑树概述 红黑树&#xff08;Red Black Tree&#xff09;是一种自平衡二叉查找树&#xff0c;是在计算机科学的中用到的一种数据结构&#xff0c;典型的用途是实现关联数组&#xff0c;红黑树和AVL树类似&#xff0c;都是…

【数据结构】--二叉树,红黑树

【数据结构】--二叉树&#xff0c;红黑树 &#x1f3c6;概念&#x1f34d;定义&#x1f34b; 术语&#x1f4dd;可视化网站 ☀️二叉树✨ 二叉搜索树&#x1f34d;定义&#x1f351;查找节点&#x1f34b;插入节点&#x1f345;遍历节点&#x1f355; 前序排序&#x1f9c0; 后…

红黑树的详细实现(C++)

红黑树概念(concept) 树型结构主要用于搜索&#xff0c;一直是科学领域的重要演算法&#xff0c;当中探讨了树可能遇到的问题&#xff1a;树的成长可能偏向于一边&#xff0c;也就是不平衡现象。 二叉树是常见且广泛使用的一种树&#xff0c;面临其可能退化成链表的潜藏缺点&…

二叉树——二叉查找树和红黑树

二叉树 二叉树&#xff0c;是一个非常重要的数据结构&#xff0c;在日常的开发中起着很重要的作用&#xff0c;它也衍生出来的各种高效的复杂的数据结构&#xff0c;为我们解决问题提供了高效的解决方案。 二叉树&#xff0c;它是由各个数据节点和左右链接构成的一种类似树的数…

Java——红黑树

概念 红黑树也是一种二叉搜索树&#xff0c;但是和avl树不同&#xff0c;它并不是依靠平衡因子来保证树的平衡的&#xff0c;而是通过颜色 红黑树每个节点中会存储颜色&#xff0c;分为红色和黑色&#xff0c;通过红黑树的限制条件&#xff0c;可以保证从根节点出发到叶子节点…

二叉树--红黑树

红黑树 定义 红黑树&#xff0c;顾名思义&#xff0c;就是树的节点只有红色和黑色两种状态&#xff0c;通过这两种状态的标识和规定颜色的使用&#xff0c;来使树达到相对平衡。为什么说相对平衡&#xff1f;因为在红黑树中&#xff0c;所有的条件限制只能保证&#xff0c;所…

二叉树之红黑树

红黑树 概述 为什么要有红黑树&#xff1f;&#xff1f;&#xff1f; 特点 红黑规则 如何在红黑树上添加节点&#xff1f; &#xff08;1&#xff09;我们不妨假设加入的节点都是黑色 &#xff08;2&#xff09;如果我们加入的节点都是红色 红黑树添加节点后如何保持红…

红黑二叉树

红黑树 红黑树是每个节点都带有颜色属性的二叉查找树&#xff0c;颜色或红色或黑色。在二叉查找树强制一般要求以外&#xff0c;对于任何有效的红黑树我们增加了如下的额外要求: 节点是红色或黑色。 根节点是黑色。 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有…

红黑树-Java实现

目录 一、定义 二、插入 三、删除 四、全部代码 五、颜色效果 一、定义 红黑树是特殊的平衡二叉树&#xff0c;具有以下特性&#xff1a; 1、根节点的颜色是黑色 2、节点颜色要么是黑色、要么是红色 3、如果一个节点的颜色是红色&#xff0c;则它的子节点必须是黑色&…