1. 自述
DZ先生今天主要讲的课题是SDP(session description protocol)会话描述协议。
2. SDP的定义
在这里有关SDP的定义,让我们来看下RFC4566(扩展更新了RFC2327)是如何定义的:
This memo defines the Session Description Protocol (SDP). SDP isintended for describing multimedia sessions for the purposes of session announcement, session invitation, and other forms of multimedia session initiation.
翻译:本规范定义了会话描述协议(SDP),SDP是为了描述多媒体会话而设计的,主要用来描述会话通告,会话邀请或者其他形式的多媒体会话初始化。
DZ先生简单解释SDP干嘛用的:不同的厂家,使用GB对接的时候,上级要能正常看下级推送过来的摄像头的视频,回放,以及球机控制等等的功能。如果不能达成一致,那么某康,某华,某视,某达等等还不为了市场开干起来?
3. 字段解释(符合RFC4566)
在进行国标对接最多的工程中,如公安,交通,学校,水利等的行业,所用到的视频厂家一般有海康,大华,宇视,工程师在完成国标对接成功后,一般需要验证的两大块业务为实况和回放。在不能实现这两块业务功能时候,这个时候就需要抓包排查了,而需要看字段就是SDP的字段了。以下为SDP定义的常用字段:
Session Description
v=protocol version
o=(owner/creator and session identifier)
s=session name
u=*(URI of description)
c=*(connection information-not required if included in all media)
Time Desctiption
t= (time the session is active)
Media descriptionf= * (媒体描述)
说明:
Session Description
v=0 "v="字段给出了SDP的版本,当前规范版本是0,这个版本没有小号版本。
"o="源(发起者)<用户名><会话ID><会话版本><网络类型><地址类型><单播地址>
如32028100001320000001 0 0 IN IPV4 192.168.0.101
<用户名>用户登录的源主机名字,如果不能提供则用"-"表示,用户名不能包含空格。这里一般是摄像机的国标ID
<会话ID>是一个字符串,<用户名><会话ID><网络类型><单播地址>这个组合形成该会话的唯一标识。用0标识的居多
<会话版本>会话版本号,推荐使用NTP时间戳。用0标识的居多
<网络类型>目前是IN代表internet,未来可能会有其他值。
<地址类型>目前只有IPV4和IPV6两种,目前主要是IPV4,。
<单播地址>创建会话的主机地址。一般为媒体服务器的地址。
注意:有时候处于某种原因,用户名和IP不想明确表示,只要保证o字段全球唯一,用户名和IP可以随机。
"s="请求媒体流的操作类型,play 代表实况;playback代表回放。download代表下载,Talk代表语音。
"u=" 行应填写视音频文件的 URI。 该 URI 取值有两种方式: 简捷方式和普通方式。
简捷方式常用 摄像机ID:其他参数格式。如32028100001320000001:10111
普通方式采用http://存储设备ID[/文件夹]* /文件名, [/文件夹]* 为0-N 级文件夹。
"c="<网络类型><地址裂类型><链接地址> 如 IN IPV4 192.168.0.100
Time Description
t字段 在回放和下载时,t行值为开始时间和结束时间。使用的时间为UNIX时间戳,需要用UNIX时间戳转为北京时间。
工具UTCTime2.exe下载链接:链接:https://pan.baidu.com/s/1LP8rD1U7qVOzaiSEGyPu-A 密码:iw52
Media description
m字段 描述媒体类型,媒体端口,媒体协议,以及媒体负载方式
例:
m=video 6000 RTP/AVP 96------媒体类型视频或视音频,传输端口6000,RTP over UDP,负载类型96
m=video 6000 TCP/RTP/AVP 96------媒体类型视频或视音频,传输端口6000,RTP over TCP,负载类型96
m=audio 6000 RTP/AVP 8------媒体类型为音频,传输端口6000,RTP over UDP,负载类型8
a字段:启用IETF RFC 4566 中对a 字段的定义a=rtpmap:
合本标准规定的媒体流, 符合本标准规定的媒体流无需该属性。
例如:a=rtpmap:96 DAHUA/90000;
a=rtpmap:96 HIKVISION/90000。
a 字段有下列格式:
———a 字段可携带倍速参数, 用于文件下载时控制下载进度。 格式如下:
a=downloadspeed: 下载倍速(取值为整型)
———a 字段可携带文件大小参数, 用于下载时的进度计算。 格式如下:
a=filesize: 文件大小(单位:Byte)
———a 字段可携带setup、connection 作为 TCP 连接协商参数, 用于 TCP 方式传输媒体流服务端、
客户端的协商, 协商机制参考IETF RFC4571 的定义。 格式如下:
a=setup:TCP 连接方式(表示本 SDP 发送者在 RTP over TCP 连接建立时是主动还是被动发起 TCP 连接, “active”为主动, “passive”为被动)
a=connection:new (表示采用 RTP over TCP 传输时新建或重用原来的 TCP 连接, 可固定采用新建 TCP 连接的方式)
a=recvonly 只接受(收流端)只用于媒体,不用于控制协议
a=sendonly 只发送 (发刘端)只用于媒体,不用于控制协议
y字段:由10位十进制整数组成的字符串,表示SSRC值
第一位为0代表实况,为1则代表回放;
第二位至第六位由监控域ID的第4位到第8位组成;
最后4位为不重复的4个整数
4. SSRC的使用
SSRC 值由媒体流发送设备所在的SIP 监控域产生, 作为媒体流的标识使用。 点播域内设备、 点播外域设备媒体流SSRC 的处理方式分别说明如下:
a) 点播域内设备媒体流SSRC 处理方式
点播域内设备媒体流时,SSRC 值由本域监控系统产生并通过Invite 请求发送给设备使用, 设备在回复的200OK 消息中携带此值, 设备在发送的媒体流中使用此值作为 RTP 的SSRC 值。 如下图所示
b) 点播外域设备媒体流SSRC 处理方式
点播外域设备媒体流时,SSRC 由被点播域产生并在被点播域回复域发送的 RTP 码流使用该值作为SSRC 值。 如下图所示
5. 实例分析
5.1 UDP回放流程分析
组网:上级平台(192.168.0.1)---国标----(192.168.1.1)下级平台
上级媒体设备:192.168.0.10
下级媒体设备:192.168.1.10
INVITE消息如下:
v=0---协议版本为0,唯一版本,目前没有比这更小的了
o=32028104001322015132 0 0 IN IP4 192.168.0.10-----用户名(即摄像头国标ID),会话ID 0,会话版本0,网络类型IN,创建会话的主机地址(即SIP服务器的IP地址)
s=Playback-----请求媒体流操作类型是回放
u=32028104001322015132:17895----URL的简捷方式摄像头ID:参数
c=IN IP4 192.168.0.10----------------收流网络类型为IN,地址类型为IPV4,收流媒体设备IP192.168.0.10
t=1529935740 1529965483----------转化成北京时间,开始时间为2018/6/25 22:09:00;结束时间为2018/6/26 06:24:43
m=video 14430 RTP/AVP 96--------媒体流类型为视音频,端口14430,RTP负载UDP,负载类型96
a=recvonly--------------------------代表只接受模式(接受媒体流端)
a=rtpmap:96 PS/90000------------固定格式,负载类型96,编码格式PS,90000是时钟
y=1281002378---------------------第一位为1代表回放,2-6是来自监控域ID的4-8位,后4位随机不重复
200 OK消息如下:
v=0---目前为0,没有其他版本
o=32028104001322015132 0 0 IN IP4 192.168.0.10----上级访问的摄像头ID,会话ID,会话版本,网络类型,地址类型,会话创建主机的IP,这边即为上级媒体流服务器IP
s=Playback-----------请求媒体流操作类型是回放
c=IN IP4 192.168.1.10----下级发流端网络类型,地址类型和发流设备IP
t=1529935740 1529965483----回放的开始和结束时间
m=video 5694 RTP/AVP 96---媒体流类型,下级发流端口,RTP负载UDP,负载类型96
a=rtpmap:96 PS/90000---负载类型,编码格式,时钟
a=sendonly---------------下级是发流,这边的只发送模式,可以理解为发送端
y=1100005694-----------第一位为1代表回放,由于本组网类型属于上下级域的方式,所以这边的SSRC值由下级产生,和上级不一样。
5.2 TCP实况流程分析
组网:摄像头192.168.1.1----国标TCP接入-----192.168.0.1 SIP服务器
平台媒体服务器IP: 192.168.0.10
INVITE消息分析:
v=0----协议版本
o=32028100002000000000 0 0 IN IP4 192.168.0.10---此组网方式,用户名为本sip监控域ID,RFC4566中提到,只要保证o字段保证会话唯一,那么用户名和IP地址可以随机(取决于开发取字段)。
s=Play------请求视频流操作类型为play,代表是实况
c=IN IP4 192.168.0.10
t=0 0-------实况的开始时间和会话时间为0 0,表示会话永恒,实况都是被动终止的,否则会话始终生效
m=video 20622 TCP/RTP/AVP 96-------TCP/RTP/AVP RTP负载TCP,即收流类型为TCP
i=primary-----这边意义不大,可忽略,主要是为了方便阅读用的
a=recvonly
a=rtpmap:96 PS/90000
a=setup:active------------TCP建立连接方式为主动接受
a=connection:new--------可固定采用新建TCP的方式
y=0281002257-------------浏览本域上的摄像头,SSRC值由本监控域产生
200Ok 消息分析:
v=0
o=32028104561321000011 4031 4031 IN IP4 192.168.1.1
s=Play
c=IN IP4 192.168.1.1
t=0 0
m=video 15064 TCP/RTP/AVP 96
a=setup:passive-----TCP连接为被动,作为摄像机是被动发起实况连接的
a=sendonly
a=rtpmap:96 PS/90000
a=username:32028104561321000011----用户名(国标接入访问字段)
a=password:admin12345----------------摄像机网页登录密码
a=filesize:0-------------------------------没有下载文件,文件大小为0
y=0281002257----------------------------本组网方式,SSRC值来自上级监控域的SSRC值
f=
【文献来源】
《公共安全视频监控联网系统 信息传输、交换、控制技术要求 》
RFC 4566 《session description protocol》