首页 > 代码库 > SDP
SDP
SDP语法
一个SDP描述含有会话级信息和媒体级信息。会话级信息应用于整个会话。例如:它能成为会话始发者或者会话的名字。媒体级信息作用于特殊的媒体流。例如:它能作为一个编码器给音频流编码或者是给视频流发送端口号。
一个SDP会话描述以会话级信息和媒体级信息开始,如果任意一个出现,另外一个就接着在后面出现。会话级部分以v=0开始,v代表类型,0为值,意思是协议版本号为0(SDP版本为0).接下来的行直到媒体级部分或者会话描述的终点,提供了整个会话的信息。
媒体级部分以m行开始。下面的行直到下一个m行出现,或者直到会话描述的终点,提供了特定媒体流的信息。
m=<媒体类型><端口号><传输协议><媒体格式>
<端口号>说明了在什么地方能够接收到媒体。
<传输协议>域通常取值为RTP/AVP,但如果不使用RTP协议,也能够取其他值。
<媒体格式>取决于媒体传输的类型。对于音频,它就是正在使用的编码解码器。
下面是一个SDP会话描述的例子:
/*****************会话级部分-开始*****************/
v=0
//协议版本号为0
o=Bob 2890844526 289084207 IN IP4 131.160.1.112
//o行说明了会话的创建者(Bob)和他的站点的地址
s=SIP Seminar
//s行包含了会话的名字
i=A Seminar on the Session Initiation Protocol
//i行包含了会话的一般信息
u=http://www.cs.columbia.edu/sip
//u行提供了统一资源定位器(URL,Uniform Resource Locator),在这个地址中能够检索到有关会话主题的更多内容
e=bob@university.edu
//e行含有会话联系人的E-mail地址
c=IN IP4 224.2.17.12/127
//c行描述了能够接收到会话的多播地址
t=2873397496 2873404696
//t行说明了什么时候会话是激活的
a=recvonly
//a行说明了这个会话不是交互式的,它只能接收
/*****************会话级部分-结束*****************/
/*****************媒体级部分-开始*****************/
m=audio 49170 RTP/AVP 0
//RTP/AVP指对于RTP的音频/视频描述文件,经过编码的音频和视频是在UDP上使用RTP传输,值0意味音频是在单个信道中使用PCM u-law进行编码和以8kHz的频率采样。
a=rtpmap:0 PCMU/8000
//a=rtpmap行传送有关媒体使用的信息,如时钟频率和信道数量。
m=vidio 51372 RTP/AVP 31
a=rtpmap:31 H261/9000
//媒体格式号31是指H.261协议并且使用90kHz的时钟频率
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
//第一个媒体流的类型为音频,第二个和第三个媒体流的类型为视频
/*****************媒体级部分-结束*****************/
v |
协议版本 |
b | 带宽信息 |
o | 会话的主人和会话标识 |
z | 调节时区 |
s | 会话的名称 |
k | 密钥 |
i | 会话信息 |
a | 属性行 |
u | 含有会话描述的URL |
t | 会话激活的时间 |
e | 获得会话信息的E-Mail地址 |
r | 会话重复的次数 |
p | 获得会话信息的电话号码 |
m | 媒体行 |
c | 连接信息 |
i | 媒体行信息 |
扩展SDP
媒体属性行(也就是a行)提供了一种扩展SDP的方法。当应用需要一个在SDP中没有包含的特征时,可以通过增加a行来包含这个特征。例如,如果多播会话的创建者想要接收者以某种特定音量播放音频,他或她能够定义一个新的媒体属性,并把这种新媒体属性加在媒体级部分的末端。
m=audio 49170 RTP/AVP 0
a=volume:8
随后,理解这个新a行的应用程序就以音量8播放音频。当应用程序发现一个它不能理解的a行时,就简单地忽视这一行并继续往下处理,就像没有遇到此行一样。尽管它不能以正确的音量回放音频,不能理解新行a=volume的应用程序仍然能够正确接收该媒体。
——来自Gonzalo著,白建军译《SIP揭密》
SDP