专栏首页用户1692782的专栏手撕RTSP协议系列(3)——sdp格式详解

手撕RTSP协议系列(3)——sdp格式详解

上一篇我们介绍了RTSP数据包的格式,在整个rtsp的交互过程,sdp也是很重要不可获取的一环,本篇我们来详细介绍一下sdp的格式!

一 简介

sdp,英文全称Session Description Protocol,会话描述协议,对应RFC2327。我们在此介绍,是因为RTSP协议中使用sdp进行媒体信息的描述,不过,sdp的应用不止于此,语音通话SIP协议,监控安防GB28181国标, 当下比较火热的webRtc都用到了sdp,可谓应用广泛!

sdp的目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话,定义了会话描述的统一格式!

sdp格式

sdp信息由多行"<type>=<value>"组成,其中<type>是一个字符串,<value>是一个字符串,type表示类型,value的格式视type而定,整个协议区分大小写,"="两侧不允许有空格!

sdp会话描述包含一个会话级描述(session_level_description)和多个媒体级描述(media_level description)组成!会话级描述的作用域是整个会话,其位置从"v="行开始到第一个媒体描述为止;媒体级描述是对单个的媒体流进行描述,如传输过程中的视频流信息,从m=开始到下一个媒体描述为止,如下图所示!

会话级描述主要包含以下字段

媒体级描述主要包含以下字段

说明:上述图片中有些行是必须的,有些行是可选的,带*号标记的行是可选的。必选的字段包括v=,o=,s=,t=,(对于会话级描述必选)m=(对于媒体级会话描述必选)。

各字段描述

1.version(必选)

格式: v=<version>

描述: 表示sdp的版本号,不包含次版本号

我们来看一个实际的抓包文件:

2.origin(必选)

格式:o=<username> <sessionid> <version> <network type> <address type> <address>

描述:o=选项对会话的发起者进行了描述;

<username>:是用户的登录名, 如果主机不支持<username>,则用"-"代替,<username> 不能包含空格;

<session id>:是一个数字串,在整个会话中,必须是唯一的,建议使用个NTP 时间戳;

<version>: 该会话公告的版本,供公告代理服务器检测同一会话的如果干个公告哪个是最新公告,基本要求是会话数据修改后该版本值递增,建议使用NTP时间戳

<networktype>: 网络类型,一般为"IN",表示internet

<addresstype>: 地址类型,一般为IP4

<adress>:地址

来看一个实际的抓包文件:

3.Session Name(必选)

格式:s=

会话名称,在整个会话中有且只有1个"s="

来看一个实际的抓包文件:

4.Connection Data(可选)

格式: c=<networktype> <address type> <connection address>描述:表示媒体连接信息;一个会话级描述中必须有"c="或者在每个媒体级描述中有一个"c="选项,也可能在会话级描述和媒体级描述中都有"c="选项;

network type表示网络类型,一般为IN,表示internet;

address type,地址类型,一般为IP4;

connection address,地址,可能为域名或ip地址两种形式

来看一个实际的抓包文件:

5.Bandwidth(可选)

格式: b=<modifier>:<bandwidth-value>

描述:该选项描述了建议的带宽,单位 kbs/s,可选,modifier包括两种类型,CT和AS,CT表示总带宽,AS表示单个媒体带宽的最大值;bandwidth-value表示具体的带宽。

来看一个实际的抓包文件:

从抓包文件看出,表示单个媒体带宽的最大值为5100 kb/s。

6.Times(必选)

格式:t=<start time> <stop time>

描述:t字段描述了会话的开始时间和结束时间,<start time> <stop time>为NTP时间,单位是秒;如果<stop time>为0表示过了<start time>之后,会话一直持续;当<start time> 和<stop time>都为0的时候,表示持久会话;建议两个值不设为0,如果设为0,不知道开始时间和结束时间,增大了调度的难度

来看一个实际的抓包文件:

start time和stop time均为0,表示一个持久的会话。

7.email(可选)

格式:e=<email address>

描述:用来描述邮件地址

来看一个实际的抓包文件:

8.phone number(可选)

格式:p=<phone number>

描述:比较简单,用来描述电话号码

9.URI(可选)

格式:u=<uri>

描述:类似于url的一个值,这里不过多介绍了

10.a=(*) (可选)

格式 :a=<*>

描述:表示一个会话级别或媒体级别下的0个或多个属性

来看一个抓包文件:

会话级别中有一个属性a,a=control:rtsp://192.17.1.63:554,表示新增的属性的类型为control,值为rtsp://192.17.1.63:554

11.media information(必选)

格式:m=<media> <port> <transport type> <fmt list>

描述:

<media>表示媒体类型

有"audio","video","application","data"(不向用户显示的数据),"control"(描述额外的控制通道);

<port>表示媒体流发往传输层的端口,对于RTP,偶数端口用来传输数据,奇数端口用来;

<transport>表示传输协议,与"c="一行相关联,一般用RTP/AVP表示,即 Realtime Transport Protocol using the Audio/Video profile over udp,即我们常说的RTP over udp;

<fmt list>表示媒体格式,分为静态绑定和动态绑定

静态绑定:媒体编码方式与RTP负载类型有确定的一一对应关系,如: m=audio 0 RTP/AVP 8

动态绑定:媒体编码方式没有完全确定,需要使用rtpmap进行进一步的说明: 如:

m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000

12. rtpmap(可选)

格式:a=rtpmap:<payload typee> <encoding name>/<clock rate>

描述:

payload type表示动态负载类型,如 98表示h264

encoding name表示编码名称,如H.264

clock rate表示时钟频率,如90000

我们来看一个抓包文件:

抓包文件中的例子包含了PS,MPEG4,H264的的参数描述。

实际举例

详细了解各个选项之后,我们来放两个实际的例子,以取得更直观的感受!

v=0
o=- 1586545639954157 1586545639954157 IN IP4 192.17.1.63
s=Media Presentation
e=NONE
b=AS:5100
t=0 0
a=control:rtsp://192.17.1.63:554/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:1920,1080
a=control:rtsp://192.17.1.63:554/trackID=1
a=rtpmap:96 H264/90000
a=fmtp:96 profile-level-id=420029; packetization-mode=1; sprop-parameter-sets=Z01AKI2NQDwBE/LgLcBAQFAAAD6AAAw1DoYACYFAABfXgu8uNDAATAoAAL68F3lwoA==,aO44gA==
m=audio 0 RTP/AVP 8
c=IN IP4 0.0.0.0
b=AS:50
a=recvonlya=control:rtsp://192.17.1.63:554/trackID=2
a=rtpmap:8 PCMA/8000
a=Media_header:MEDIAINFO=494D4B48010300000400000111710110401F000000FA000000000000000000000000000000000000;
a=appversion:1.0
v=0
o=34020000001320000010 0 0 IN IP4 192.17.1.202
s=Play
c=IN IP4 192.17.1.202
t=0 0
m=video 5500 RTP/AVP 96 97 98
a=rtpmap:96 PS/90000
a=rtpmap:97 MPEG4/90000
a=rtpmap:98 H264/90000
a=recvonly

通过实际的例子,我们再对照之前的各字段描述,我们就会对sdp有一个更深入的了解!关于sdp的介绍就到这里,下一篇我们开始详细介绍RTSP的各个选项,欢迎持续关注!

本文分享自微信公众号 - 视界音你而不同(WorldOfVideoAndAudio),作者:马龙飞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 手撕RTSP协议系列(1)——Rtsp基本流程

    哈喽,久违的小伙伴们!之前开了一个专辑手撕了rtmp协议!对于流媒体协议,rtsp协议也是很常见的,接下来我们继续手撕,手撕rtsp协议!本篇我们首先来简单了解...

    视界音你而不同
  • 手撕RTSP协议系列(6)——SETUP

    SETUP请求的作用是指明媒体流该以什么方式传输;每个流PLAY之前必须执行SETUP操作;发送SETUP请求时,客户端会指定两个端口,一个端口用于接收RTP数...

    视界音你而不同
  • 手撕RTSP协议系列(2)——Rtsp消息格式

    RTSP消息分为两大类,一类是请求消息(request),一类是回应消息(ressponse)!

    视界音你而不同
  • 手撕RTSP协议系列(12)——RTP包格式

    前面我们花了较多的篇幅来介绍了RTSP协议的一些细节,但是rtsp传输,本质上涉及三种协议,RTSP、RTP以及RTCP。RTSP主要负责连接建立,销毁及一些其...

    视界音你而不同
  • 手撕RTSP协议系列(13)——RTCP协议

    之前的文章,介绍了RTSP和RTP协议,RTSP用于建立连接及发送请求等,RTP用于实际的媒体数据传输。整个RTSP的流程中,还有一种不可或缺的协议, 那就是R...

    视界音你而不同
  • SDP在RTSP、国标GB28181、WebRTC中的实践

    注意的是SDP虽然具备这些能力参数信息的描述功能,但是SDP并不是传输协议,需要用RTSP、SIP、HTTP等协议进行承载传输、交换,如果大家协调好了之后,就可...

    用户5796036
  • 手撕RTSP协议系列(7)——PLAY

    上一篇我们熟悉了RTSP_SETUP消息,SETUP可以说是PLAY的准备流程,只有SETUP请求被成功回复之后,客户端才可以发起PLAY请求。本篇我们就来看一...

    视界音你而不同
  • 手撕RTSP协议系列(8)——PAUSE

    上一篇我们讲解了RTSP PLAY消息,PLAY请求成功之后,RTSP server就会一直向客户端发送RTP数据包!开始“播放”之后,我们相应的就会有暂停,停...

    视界音你而不同
  • 手撕RTSP协议系列(9)——TEARDOWN

    上一篇我们讲了RTSP PAUSE消息,本篇我们来看下RTSP TEARDOWN消息!

    视界音你而不同

扫码关注云+社区

领取腾讯云代金券