---------- 在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. 2. 3. 4. 5. 6. 7. 时间描述: 8 9. 10. 11. 12. 说明: 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
识53655765,版本2353687637,网络类型internet,地址类型Ipv4,地址128.3.4.5)
s=Mr.Watson,comehere.(会话名:Mr.Watson,comehere.)
i=ASeminaronthesessiondesc
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:5361201@219.150.172.66SIP/2.0
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK56fb62b7
To:”5361201”<sip:5361201@219.150.172.66>
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688INVITE
Contact:<sip:5361203@219.150.170.175: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
//会话源:用户名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:5361201@219.150.172.66>
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688INVITE。
3. 软交换转发INVITE到被叫
INVITEsip:5361201@219.150.170.177SIP/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:5361201@219.150.172.66>
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688INVITE
Contact:<sip:5361203@219.150.170.175: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
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:5361201@219.150.172.66>
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688INVITE
Record-Route:<sip:219.150.172.66>
Contact:<sip:5361201@219.150.170.177>
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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688INVITE
Record-Route:<sip:219.150.172.66>
Allow:INVITE,ACK,OPTIONS,BYE,CANCEL,MESSAGE,INFO,UPDATE
Contact:<sip:5361201@219.150.170.177>
Content-Type:application/sdp//表述SDP会话描述
Content-Length:218//消息长度字节数218
v=0//版本号
o=536120133395842683608019
//会话源:用户名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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688INVITE
Contact:<sip:5361201@219.150.170.177>
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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688INVITE
Contact:<sip:5361201@219.150.170.177>
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
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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688ACK
Contact:<sip:5361203@219.150.170.175:5060>
Max-Forwards:70
Route:<sip:5361201@219.150.170.177>。
10. 软交换转发ACK
ACKsip:5361201@219.150.170.177SIP/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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15688ACK
Contact:<sip:5361203@219.150.170.175: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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15689BYE
Max-Forwards:70
Route:<sip:5361201@219.150.170.177>
User-Agent:ZTEMULTIMEDIASIPPHONE/V1.004-01-10。
12. 软交换转发BYE
BYEsip:5361201@219.150.170.177SIP/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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
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:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15689BYE
Content-Length:0。
14. 软交换转发OK
SIP/2.0200OK
Via:SIP/2.0/UDP219.150.170.175:5060;branch=z9hG4bK5b9377ab
To:”5361201”<sip:5361201@219.150.172.66>;tag=jmNAzkktW56kiV0M1Y
From:”5361203”<sip:5361203@219.150.172.66>;tag=afaa96db-30263
Call-ID:1b4659ea-afaa96db@219.150.170.175
CSeq:15689BYE
Content-Length:0。
|