上一篇我们介绍了RTSP数据包的格式,在整个rtsp的交互过程,sdp也是很重要不可获取的一环,本篇我们来详细介绍一下sdp的格式!
一 简介
sdp,英文全称Session Description Protocol,会话描述协议,对应RFC2327。我们在此介绍,是因为RTSP协议中使用sdp进行媒体信息的描述,不过,sdp的应用不止于此,语音通话SIP协议,监控安防GB28181国标, 当下比较火热的webRtc都用到了sdp,可谓应用广泛!
sdp的目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话,定义了会话描述的统一格式!
二 sdp格式
sdp信息由多行"
sdp会话描述包含一个会话级描述(session_level_description)和多个媒体级描述(media_level description)组成!会话级描述的作用域是整个会话,其位置从"v="行开始到第一个媒体描述为止;媒体级描述是对单个的媒体流进行描述,如传输过程中的视频流信息,从m=开始到下一个媒体描述为止,如下图所示!
会话级描述主要包含以下字段
媒体级描述主要包含以下字段
说明:上述图片中有些行是必须的,有些行是可选的,带*号标记的行是可选的。必选的字段包括v=,o=,s=,t=,(对于会话级描述必选)m=(对于媒体级会话描述必选)。
三 各字段描述
1.version(必选)
格式: v=
描述: 表示sdp的版本号,不包含次版本号
我们来看一个实际的抓包文件:
2.origin(必选)
格式:o=
描述:o=选项对会话的发起者进行了描述;
来看一个实际的抓包文件:
3.Session Name(必选)
格式:s=
会话名称,在整个会话中有且只有1个"s="
来看一个实际的抓包文件:
4.Connection Data(可选)
格式: c=
network type表示网络类型,一般为IN,表示internet;
address type,地址类型,一般为IP4;
connection address,地址,可能为域名或ip地址两种形式
来看一个实际的抓包文件:
5.Bandwidth(可选)
格式: b=
描述:该选项描述了建议的带宽,单位 kbs/s,可选,modifier包括两种类型,CT和AS,CT表示总带宽,AS表示单个媒体带宽的最大值;bandwidth-value表示具体的带宽。
来看一个实际的抓包文件:
从抓包文件看出,表示单个媒体带宽的最大值为5100 kb/s。
6.Times(必选)
格式:t=
描述:t字段描述了会话的开始时间和结束时间,
来看一个实际的抓包文件:
start time和stop time均为0,表示一个持久的会话。
7.email(可选)
格式:e=
描述:用来描述邮件地址
来看一个实际的抓包文件:
8.phone number(可选)
格式:p=
描述:比较简单,用来描述电话号码
9.URI(可选)
格式:u=
描述:类似于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=
描述:
有"audio","video","application","data"(不向用户显示的数据),"control"(描述额外的控制通道);
静态绑定:媒体编码方式与RTP负载类型有确定的一一对应关系,如: m=audio 0 RTP/AVP 8
动态绑定:媒体编码方式没有完全确定,需要使用rtpmap进行进一步的说明: 如:
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
12. rtpmap(可选)
格式:a=rtpmap:
描述:
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的各个选项,欢迎持续关注!
扫码关注了解更多,还有交流群哦