SDP:会话描述协议

版权声明:本文原创发布于公众号 MediaAV,转载请务必注明出处!https://blog.csdn.net/zhaoidong/article/details/82219250


此文是官方文档的部分翻译,如需阅读全文,请移步 官方文档
类似这种左边有竖线的描述,是我的注解,意图是帮助理解,如干扰阅读思路请忽略

摘要

这个备忘录是用于定义会话描述协议(SDP)的。 SDP旨在描述多媒体会话,包括:会话通知、会话邀请和其它形式发起的多媒体会话。

1 简介

用于发起媒体会话时,向参与者传达媒体细节,传输地址和其它会话描述元数据。

SDP 只为此类信息提供标准的表达方案,而不管信息传输的方式。SDP 是纯粹的会话描述的格式,而不是传输协议。

SDP的目的是通用,因此可以用于各种网络环境和应用程序。但是,它并不能用于会话内容和媒体编码的协商:这被视为超出会话描述的范围。

但我的理解,编码方式其实可放在属性“a=”中表达

......
m=video 9 UDP/TLS/RTP/SAVPF 100 96 98 102 127 97 99 101 125
c=IN IP4 0.0.0.0
a=mid:video
......
a=rtpmap:96 VP8/90000
......
a=rtpmap:100 H264/90000

5 会话说明

一个 SDP 会话描述是通过媒体类型 “application/sdp” 来表示的。

SDP会话描述由多行文本表单组成:=

是一个 case-significant 字符, 是一个格式由 决定的结构化文本。通常, 是用空格隔开的字段,或是无规则的字符串,并且除非特定字段另有定义,否则是 case-signigicant。绝对不能在 “=” 两端使用空格。

一个 SDP 会话描述包括一个 session-level 部分,后跟0个或若干个 media-level 部分。session-level 部分由 “v=” 开头,直到 media-level 部分。每一个 media-level 部分由 “m=” 开头,直到下一个 media-level 或整个会话的结尾。通常,session-level 的值是所有媒体的默认值,除非被等效的 media-level 值覆盖。

描述中并非每个描述项都是必须的,但每个描述项必须按照下表的顺序依次填写(这种固定的表单结构大大提高了检测错误效率,并且降低了解析难度)。

可选项使用 * 标记。

会话描述

v=(协议版本)
o=(发起者和会话标识符)
s=(会话名称)
i=* (会话信息)
u=* (URI 描述)
e=* (Email 地址)
p=* (电话号码)
c=* (连接信息 ― 如果所有媒体描述中都包含则此处非必须)
b=* (0个或多个带宽信息)
时间描述:1个或多个(见下文)
z=* (时区调整)
k=* (密钥)
a=* (0个或多个会话属性)
媒体描述:0个或多个
  • 时间描述
t=(会话活动时间)
r=* (0次或多次重复)
  • 媒体描述(如果需要)
m=(媒体名称和传输地址)
i=* (媒体标题)
c=* (连接信息 — 如果包含在会话层则该字段可选)
b=* (0个或多个带宽信息)
k=* (密钥)
a=* (0个或多个媒体属性)

的字母集是尽量小且不可扩展的 – 一个 SDP 解析器必须能够完全忽略任何它不能理解的项。“a” 这个属性机制就是扩展 SDP 的主要途径, 使其适应特定的程序或媒体。

会话描述的 session-level 中的连接(“c=”)信息和属性(“a=”)信息适用于这个会话中的所以媒体(media-level),除非被媒体描述的同名属性覆盖。

session-level

v=(协议版本)
o=(发起者和会话标识符)
s=(会话名称)
i=* (会话信息)
u=* (URI 描述)
e=* (Email 地址)
p=* (电话号码)
c=* (连接信息 ― 如果所有媒体描述中都包含则此处非必须)
b=* (0个或多个带宽信息)
z=* (时区调整)
k=* (密钥)
a=* (0个或多个会话属性)

time-level

t=(会话活动时间)
r=* (0次或多次重复)

media-level

m=(媒体名称和传输地址)
i=* (媒体标题)
c=* (连接信息 — 如果包含在会话层则该字段可选)
b=* (0个或多个带宽信息)
k=* (密钥)
a=* (0个或多个媒体属性)

会话描述 主要包括 session 和 meida 两部分(time 部分先不说),两部分都有 c a 这两个,如果媒体描述没有用这些 ,则取会话描述的值作为默认值;如果媒体描述赋值了,则用自己的值。因为媒体描述可能有多个,有的需要特别赋值,有的只需取默认值即可。

下面是一个SDP 的实例:

标准版

v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
e=j.doe@example.com (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000

补全版(但并非规范)

v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
e=j.doe@example.com (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
c=IN IP4 224.2.17.12/127
a=recvonly
m=video 51372 RTP/AVP 99
c=IN IP4 224.2.17.12/127
a=recvonly
a=rtpmap:99 h263-1998/90000

第二组 media 有没有 “a=recvonly” 这个属性我是不太确定的,因为第二组 media 的 “a=rtpmap:99 h263-1998/90000” 不知道能否算是覆盖了 session 的 “a=recvonly”。

但根据原文的描述,应该是不覆盖“a=recvonly”这一项的。

For instance, in the example below, each media behaves as if it were given a “recvonly” attribute.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值