下面是一个典型的SIP
会话
要传送媒体首先要建立一个媒体会话(Session
)。建立媒体会话实际上就是通过SDP offer/answer
交换进行就会话的媒体参数进行协商的一个过程。但在SIP
中没有规定使用哪个SIP
消息来携带一个SDP
(offer
或answer
)。理论上,任何SIP
消息的正文中都可以包含会话描述部分。但是,一个SIP
中的会话描述并不一定是一个offer
或一个answer,
只有符合在SIP
标准RFCs
中所描述的规则的会话描述才会被解释为一个offer
或一个answer
。offer/answer
模型定义会话的更新。在SIP
中,对话(dialog
)用于将offer/answer
交换及其要更新的会话联系起来。换句话说,只有在某个SIP
对话中进行的offer/answer
交换,才能更新该对话所管理的会话。
在SIP
消息中承载offer/answer
的规则定义在RFC 3261[1], RFC 3262 [2]
以及RFC 3311 [4]
中。在这些RFCs
中定义了
六种
在SIP
消息中交换offer/answer
的模式。
模式1
和模式2
是在RFC3261
中定义
的,用于不支持可靠临时响应消息(1xx-rel
)的SIP
实体之间的会话建立。
模式
1
:UAC
在
INVITE
请求中携带一个 offer, UAS
在
200 INVITE
响应中返回answer
。这是最常用的一种模式。
模式
2
:UAC
在
INVITE
请求中没有携带 offer
。UAS
在
200 INVITE
响应中携带一个offer
,UAC
通过ACK
返回answer
。这种模式通常用于3PCC
中。
模式3
、模式4
、模式5
都是在RFC3262
中
定义的,可用在支持100rel
(可靠临时响应)扩展的SIP
实体之间。其中模式3
、模式4
可用于会话建立。模式5
只能用于会话参数更新。它们利用 1xx-rel
响应消息来携带offer
或answer
来建立会话。
模式
3
:UAC
在
INVITE
请求中携带一个offer, UAS
在
1xx-rel
响应中返回answer
。这样,在呼叫完成之前(UAC
没有收到200 INVITE
消息)会话已建立。此后,会话参数还可以被更新,具体见模式5
及模式6
。
模
式
4
: UAC
在
INVITE
请求中没有携带offer
。UAS
在
1xx-rel
可靠响应中携带一个offer
,UAC
通过PRACK
返回answer
。同样地,
在呼叫完成之前(UAC
没有收到200 INVITE
消息)会话已建立。此后,会话参数还可以被更新,具体见模式6
。
模式
5
:
当UAC
与UAS
采用模式3
建立会话
后,呼叫并未完成(见模式3
)。之后,可以使用模式5
对已建立的会话参数进行更新:UAC
在
PRACK
请求中携带一个新的offer, UAS
在
200 PRACK
响应中返回answer
。这样,会话参数便被更新。
模式6
在RFC3311
中定义,主要用于在早期
对话中更新已建立的会话参数,会话可能是通过模式3
,也可能是通过模式4
建立的。
模式6
还可以对会话进行多次更新。例如,之前已通过模
式5
更新过的会话还可以使用模式6
更新;甚至通过模式6
更新过的会话还可以再次使用模式6
更新。
模
式
6
:UAC
(或UAS
)发送
UPDATE
请求其中携带一个新的offer, AS
(或UAC
)在
200 UPDATE
中返回一个offer
。这样,会话参数便被更新。注意,UAS
或UAC
在发送UPDATE
进行会话更新之前,必须保证之前的会话更新过程已经
完成。也就是说,发出的offer
已经收到answer
,或者收到的offer
已经产生了answer
。
总
结
INVITE
方法提供了会话建立过程。
在没有100rel
选项时,会话建立过程非常简单,只能使用200INVITE
响应消息传送会话描述,这些会话描述可能是answer(
模式1),
也可能是 offer
(模式2
)。无论使用何种模式,会话都只能呼叫完成后才能建立,在呼叫完成之前和呼叫完成之后只能有一个会话
–
用于最终通话的常规会话,因而,不能建立所谓的“早期媒体会话”。
在引入100rel
选项后,会话建立过程变得复杂,通过可靠的临时消
息消息也可以传送会话描述,这些会话描述可能是answer(
模式3),
也可能是offer
(模式4
)。模式3
和模式4
都能够在呼叫完成前建立会话。并且
在呼叫完成之前,这些会话还可以被更新。这样就能够建立与常规会话不同的“早期媒体会话”,完成回铃音的产生等功能。
PRACK
方法可
用于更新已建立的会话的参数(模式5
)
UPDATE
方法可用于多次更新已建立的会话的参数(模式6
),发起更新的可以是UAC
也可以是 UAS
。
SDP
及RTP
的工作过程:
一、SIP
协议告知对方UDP
端口号,协商媒体类型
1.1
主叫方发给被叫方的INVITE
请求
1.2
被叫方回给主叫方的183
消息
二、RTP
媒体流
2.1
主叫方发给被叫方的一个RTP
包,UDP
端口号是SDP
协商好的,包的序列号是28590
2.2
主叫方发给被叫方的下一个RTP
包,UDP
端口号是SDP
协商好的,包的序列号是28591
三、RTCP
媒体流
3.1
每发完一批RTP
包的时候,就发一个RTCP
包,告诉接收方我刚才发了多少RTP
包,多少个字节
本文转自:
https://wenku.baidu.com/view/854dd3e55ef7ba0d4a733bed.html