在SIP编程中,设置SDP的过程很简单, snprintf (tmp, 4096, "v=0\r\n" "o=anonymous 0 0 IN IP4 0.0.0.0\r\n" "t=1 10\r\n" "a=username:rainfish\r\n" "a=password:123\r\n");
osip_message_set_body (invite, tmp, strlen(tmp)); osip_message_set_content_type (invite, "application/sdp");
其实SDP只是一个字符串,只需要按照格式写好字符串直接放入SDP里即可。关键是要知道具体意思和如何写SDP,下面主要参看百度文档中兴的SDP协议原理及应用 ----------
说明: SDP各type的详细解释: 会话描述: 1. 协议版本:v=SDP版本 目前为0,没有子版本。 2. 会话源: o<用户名> 用户在发起主机上登录名,如果主机不支持用户标识的概念,则为”-”。 <会话id> 一般为数字串,其分配由创建工具决定,建议用网络时间协议(NTP)时戳,以确保唯 一性。 <网络类型>为文本串”IN”。 <地址>按照上述的IP4或者IP6格式写出 3. 会话: s=ISO10646字符表示的会话名 4. 会话信息: v=ISO10646字符表示的会话信息 5. Email地址:e=给出会议负责人的联系信息。他不一定是创建会议公告的人。电话号码p=给出会议负责人的 信息,他不一定是创建会议公告的人 6. 连接数据: c=媒体连接数据,会话级为媒体级的默认值 7. 带宽: b=给出会话或媒体所用带宽,单位为kbit/s.修饰语:CT(会议总带宽,表示所有地点所有媒体 的总带宽),AS(应用特定最大带宽,表示一个地点单一媒体带宽) 时间描述: 8 t=见上 9. r=见上 10. 时区调整:z=见上 11. 加密密钥:k=已定义的方法有k=clear:<加密密钥>密钥没有变换 k=base64:<编码密钥>已编码,因为它含有SDP禁用, k=uri:<获得密钥的URI> k=prompt。SDP没有提供密钥但该会话或媒体流是要求加密的。 12. 属性:a= 一个m=行可有多个a=行,SDP建议扩展如下: 会话级:a=cat:<类别>//给出点分层次式会话分类号,供接收方筛选会话 a=keywds:<关键词>//供接收方筛选会话 a=tool:<工具名和版本号>//创建会话描述的工具名和版本号 a=recvonly/sendrecv/sendonly//收发模式 a=type:<会议类型>//有:广播,聚会,主席主持,测试,H.323 a=charset:<字符集>//显示会话名和信息数据的字符集 a=sdplang:<语言标记>//描述所有语言 a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言 a=framerate:<帧速率>//单位:帧/秒 a=quality:<质量>//视频的建议质量(10/5/0) a=fmtp:<格式><格式特定参数>//定义指定格式的附加参数 媒体级: 说明: SDP用于构建INVITE和200OK响应消息的消息体,供主\被叫用户交换媒体信息。
SDP在SIP电话中的应用SDP用于构建INVITE和200OK响应消息的消息体,供主\被叫用户交换媒体信息。 1. 媒体流的配置 (1) 主被叫的媒体描述必须完全对应主被叫的第n个媒体流(“m=“)对应,都包含”a=rtpmap”.这样的目的是易于适应静态净荷类型到动态净荷类型的转换。 (2) 如被叫不想接收主叫提出的某个媒体流则在响应中设置该媒体流的端口号为0.并且必须返回对应的媒体流行。 2. 单播SDP值的设定 (1) 对于只发媒体流,端口号无意义,应设为0。 (2) 每个媒体流的净载荷类型例表应传送两个信息:能接受/发送的编译码,和用以标识这些编译码的RTP净载荷类型号。 (3) 如对于某一媒体流,主/被叫没有公共的媒体格式,被叫仍然要求返回媒体流的”m=“行,端口好为0,同时,不列净载荷类型。 (4) 如果所有媒体流均无公共的媒体格式,则被叫回送400响应(坏请求),并加入304警告头字段(无媒体类型)。 3. 多播操作 (1) 接受和发送的多播地址是相同的。 (2) 被叫不允许改变媒体流的只发,只收,或收/发特性。 (3) 如果被叫不支持多播,则回送400响应和330警告(多播不可用)。 4. 延时媒体流 由于主叫可能实际上是一个和其他协议(如H.323)互同的协议的网关,与S要求呼叫建立后进行媒体协商.这样,主叫可以先发不带SDP的INVITE,通过ACK或重新发一个INVITE请求修改被叫的会话描述(SDP)。 5. 媒体流保持 如果要求对方进入HOLD,即暂时停止发送一个或多个媒体流,这可以用Re-INVITE,话描述和原来的请求或响应中的描述相同,只是,”c=“为”0.0.0.0”,还有就是Re_INVITE中的Cseq得递增。 6. 对应于SIP中有3个实体字段 (1) Content-Type:指明消息体类型,有两种:i.Application/sdp:表示是SDP会话描述ii.Text/html。表示是普通文本或HTML格式的描述。 (2) Content-Encoding:补充说明消息体类型,使用户可以采用压缩编码编辑消息体。 (3) Content-Length:给出消息体的字节数。
3.1 SDP的举例描述
v=0(版本为0)
o=bell536557652353687637IN IP4128.3.4.5(会话源:用户名bell,会话标
识53655765,版本2353687637,网络类型internet,地址类型Ipv4,地址128.3.4.5)
s=Mr.Watson,comehere.(会话名:Mr.Watson,comehere.)
i=ASeminaronthesessiondesc riptionprotocol(会话信息:)
t=31493286000(起始时间:t=3149328600(NTP时间值),终止时间:无)
c=INIP4kton.bell-tel.com(连接数据:网络类型internet,地址类型Ipv4,连接地址kton.bell-tel.com)
m=audio3456RTP/AVP0345(媒体格式:媒体类型audio,端口号3456,传送层协议RTP/AVP,格式列表为0345)
a=rtpmap:0PCMU/8000(净荷类型0,编码名PCMU,抽样速度为8kHZ)
a=rtpmap:3GSM/8000(净荷类型3,编码名GSM,抽样速度为8kHZ)
a=rtpmap:4G723/8000(净荷类型4,编码名G723,抽样速度为8kHZ)
a=rtpmap:5DVI4/8000(净荷类型5,编码名DVI4,抽样速度为8kHZ)
Sip中sdp消息举例描述
下例是个典型正常的sip电话呼叫流程:
主叫IP:219.150.170.175被叫IP:219.150.170.177软交换IP:219.150.172.66
呼叫过程:主叫摘机拨号,被叫振铃,被叫摘机,通话,主叫挂机,被叫听忙音,被叫挂机。
1. 主叫摘机拨号
INVITEsip:[email protected]/2.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE
Contact:<sip:[email protected]:5060>
Max-Forwards:70
User-Agent:ZTEMULTIMEDIASIPPHONE/V1.004-01-10
Content-Type:application/sdp//表示是SDP会话描述
Content-Length:266//消息体为266字节
v=0//版本为0
o=536120333395842673608019 723INIP4219.150.170.175
//会话源:用户名5361203,会话标识3339584267,版本3608019723,网络类型internet,地址类型Ipv4,地址主叫ip219.150.170.175
s=sessionSDP//会话名:sessionSDP
c=INIP4219.150.170.175//连接数据:网络类型internet,地址类型Ipv4,连接地址219.150.170.175
t=00//无开始和结束时间
m=audio10000RTP/AVP048//媒体格式:媒体类型audio,端口号10000,传送层协议RTP/AVP,格式列表为048
a=ptime:20//媒体分组的时长20s
a=rtpmap:0PCMU/8000//净荷类型0,编码名PCMU,抽样速度为8kHZ
a=rtpmap:4G723/8000//净荷类型4,编码名G723,抽样速度为8kHZ
a=rtpmap:8PCMA/8000//净荷类型8,编码名PCMA,抽样速度为8kHZ
m=video10002RTP/AVP34//媒体格式:媒体类型video,端口号10002,传送层协议RTP/AVP,格式列表为34
a=rtpmap:34H263/90000//净荷类型34,编码名H263,抽样速度为90kHZ。
2. 软交换应答Trying
SIP/2.0100Trying
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE。
3. 软交换转发INVITE到被叫
INVITEsip:[email protected]/2.0
Via:SIP/2.0/UDP219.150.172.66:5060;branch=751e6026.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE
Contact:<sip:[email protected]:5060>
Max-Forwards:69
Record-Route:<sip:219.150.172.66>
User-Agent:ZTEMULTIMEDIASIPPHONE/V1.004-01-10
Content-Type:application/sdp
Content-Length:266
v=0
o=536120333395842673608019 723INIP4219.150.170.175
s=sessionSDP
c=INIP4219.150.170.175
t=00
m=audio10000RTP/AVP048
a=ptime:20
a=rtpmap:0PCMU/8000
a=rtpmap:4G723/8000
a=rtpmap:8PCMA/8000
m=video10002RTP/AVP34
a=rtpmap:34H263/90000。
4. 被叫应答Trying
SIP/2.0100Trying
Via:SIP/2.0/UDP219.150.172.66:5060;branch=751e6026.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE
Record-Route:<sip:219.150.172.66>
Content-Length:0。
5. 被叫应答Ringing
SIP/2.0180Ringing
Via:SIP/2.0/UDP219.150.172.66:5060;branch=751e6026.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE
Record-Route:<sip:219.150.172.66>
Contact:<sip:[email protected]>
Content-Length:0。
6. 被叫应答OK
SIP/2.0200OK
Via:SIP/2.0/UDP219.150.172.66:5060;branch=751e6026.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE
Record-Route:<sip:219.150.172.66>
Allow:INVITE,ACK,OPTIONS,BYE,CANCEL,MESSAGE,INFO,UPDATE
Contact:<sip:[email protected]>
Content-Type:application/sdp//表述SDP会话描述
Content-Length:218//消息长度字节数218
v=0//版本号
o=536120133395842683608019 724INIP4219.150.172.66
//会话源:用户名5361201,会话标识3339584268,版本3608019724,网络类型internet,地址类型Ipv4,地址219.150.172.66
s=SDPSessionForC&SMoIP//会话名:SDPSessionForC&SMoIP
c=INIP4219.150.170.177//连接数据:网络类型internet,地址类型Ipv4,连接地址219.150.170.177
t=00//开始结束时间,无
m=audio40000RTP/AVP0//被叫匹配的媒体格式:媒体类型audio,端口号40000,传送层协议RTP/AVP,格式列表为0
a=rtpmap:0PCMU/8000//净荷类型0,编码名PCMU,抽样速度为8kHZ
m=video40002RTP/AVP34//媒体格式:媒体类型video,端口号40002,传送层协议RTP/AVP,格式列表为34
a=rtpmap:34H263/90000//净荷类型34,编码名H263,抽样速度为90kHZ。
7. 软交换转发Ringing
SIP/2.0180Ringing
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE
Contact:<sip:[email protected]>
Record-Route:<sip:219.150.172.66>
Content-Length:0。
8. 软交换转发OK
SIP/2.0200OK
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688INVITE
Contact:<sip:[email protected]>
Allow:INVITE,ACK,OPTIONS,BYE,CANCEL,MESSAGE,INFO,UPDATE
Record-Route:<sip:219.150.172.66>
Content-Type:application/sdp
Content-Length:218
v=0
o=536120133395842683608019 724INIP4219.150.172.66
s=SDPSessionForC&SMoIP
c=INIP4219.150.170.177
t=00
m=audio40000RTP/AVP0
a=rtpmap:0PCMU/8000
m=video40002RTP/AVP34
a=rtpmap:34H263/90000。
9. 主叫发送ACK
ACKsip:219.150.172.66SIP/2.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688ACK
Contact:<sip:[email protected]:5060>
Max-Forwards:70
Route:<sip:[email protected]>。
10. 软交换转发ACK
ACKsip:[email protected]/2.0
Via:SIP/2.0/UDP219.150.172.66:5060;branch=4b781cbf.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15688ACK
Contact:<sip:[email protected]:5060>
Max-Forwards:69。
11. 主叫挂机
BYEsip:219.150.172.66SIP/2.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK5b9377ab
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15689BYE
Max-Forwards:70
Route:<sip:[email protected]>
User-Agent:ZTEMULTIMEDIASIPPHONE/V1.004-01-10。
12. 软交换转发BYE
BYEsip:[email protected]/2.0
Via:SIP/2.0/UDP219.150.172.66:5060;branch=03e255d5.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK5b9377ab
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15689BYE
Max-Forwards:69
User-Agent:ZTEMULTIMEDIASIPPHONE/V1.004-01-10。
13. 被叫应答OK
SIP/2.0200OK
Via:SIP/2.0/UDP219.150.172.66:5060;branch=03e255d5.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK5b9377ab
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15689BYE
Content-Length:0。
14. 软交换转发OK
SIP/2.0200OK
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK5b9377ab
To:”5361201”<sip:[email protected]>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:[email protected]>;tag=afaa96db-30263
Call-ID:[email protected]
CSeq:15689BYE
Content-Length:0。
|