协议介绍
Session Description Protocol是一种用于描述媒体会话参数的协议。SDP通常包含在SIP消息当中,用于通信双方协商并建立相关的音视频参数。在实时通信应用程序中,其内容可以根据具体的通信需求进行协商调整。通信中的协商就是指通信双方就特定问题、参数例如媒体会话参数、加密、身份验证等进行讨论并确定的过程。
参数解析
以下展示说明SDP内参数的具体含义以及用途:
会话描述:
v=(protocol version)一般v=0
o=(owner/creator and session identifier)可以表示为o=<用户名><会话id><版本><网络类型><地址类型><地址>
s= (session name)为会话名。在gb28181中有play实时开流、playback回放、download下载、talk语音对讲
i=* (session information)为会话信息
u=* (URI of description)为URI
e=* (email address)为email
p=* (phone number)为phone
c=* (connection information)可以表示为c=<网络类型><地址信息><连接地址>,写作c=IN IP4 224.2.13.23/127 如果是发送方,表明是从这个ip往出发;如果是接收方,表明在这个ip接受数据。
b=* (bandwidth information)可以表示为b=<修改量(CT Conference Total IASApplication-specific Max)>:<带宽值(kb/s)>写作b=CT:120
z=* (time zone adjustments)用作时区调整
k=* (encryption key)可以表示为k=<方法>:<密钥>或k=<方法>
a=* (zero or more session attribute lines)可以表示为a=<属性>或a=<属性>:<值>
时间描述:
t= * (time the session is active)可以表示为t=<开始时间><结束时间>单位为秒,十进制NTP可以写作t=2873397468 2873404969 在GB28181中,实时播放都设置为0,录像回放时,为录像开始时间,结束时间。
r=* (zero or more repeat times)可以表示为r=<重复时间><活动持续时间以开始时刻为参考的偏移列表>单位为秒,可以写作r=604800 3666 90000或写作如下格式r=7d 1h 0 25h
媒体描述:
m=* (media name and transport address)可以表示为m=<媒体><端口><传送><格式列表>写作m=audio 49170 RTP/AVP 0 3,其中占据端口号位置的0,表示端口还未确定,对于格式列表分为静态绑定和动态绑定:静态绑定即媒体编码方式与RTP负载类型有确定的一一对应关系,动态绑定即媒体编码方式(如时钟频率,音频信道数等)没有完全确定,需要进一步的属性说明(用rtpmap)
i=* (media title媒体称呼)
a=* (zero or more media attribute lines)多用来补充扩展信息用,其中的rtpmap是来对m字段中的fmt list进一步说明的
另外有f字段是媒体描述 f=v/编码格式/分辨率/帧率/码率类型/码率大小 a/编码格式/码率大小/采样率。y字段是存放 SSRC,十进制字符串,共10位,第一位0为实时,1为历史。2-6位为SIP监控域ID的4-8位,7-10位作为域内媒体流标识,是一个与当前域内产生的媒体流SSRC值后4位不重复的十进制数
补充说明
值得说明的是因为各自的性质其中v,o,s,t,m为必选参数,而其他为可选配置;如果SDP语法分析器不能识别某一类型(Type),则整个描述丢失;如果”a=”的某属性值不理解,则予以丢失;整个协议区分大小写;“=”两侧不允许有空格; 会话级的描述就是媒体级描述的缺省值;所有均格式为<type>=<value>。
同样的,通过修改SDP,可以定制和优化媒体会话的行为,在一些其他协议的支撑下,SDP也可以在实际项目中添加一些扩展,如自定义的属性和参数等,以满足特定的需求,从而引入新的编解码器、网络传输选项等自定义的功能。