1、SIP 交换中的 SDP 及 RTP 的工作过程下面是一个典型的 SIP 会话要传送媒体首先要建立一个媒体会话(Session) 。建立媒体会话实际上就是通过 SDP offer/answer 交换进行就会话的媒体参数进行协商的一个过程。但在 SIP 中没有规定使用哪个 SIP 消息来携带一个 SDP(offer 或 answer) 。理论上,任何 SIP 消息的正文中都可以包含会话描述部分。但是,一个 SIP 中的会话描述并不一定是一个 offer 或一个 answer,只有符合在 SIP 标准 RFCs 中所描述的规则的会话描述才会被解释为一个 offer 或一个answer。offer/
2、answer 模型定义会话的更新。在 SIP 中,对话(dialog)用于将 offer/answer交换及其要更新的会话联系起来。换句话说,只有在某个 SIP 对话中进行的 offer/answer 交换,才能更新该对话所管理的会话。在 SIP 消息中承载 offer/answer 的规则定义在 RFC 32611, RFC 3262 2 以及 RFC 3311 4中。在这些 RFCs 中定义了六种在 SIP 消息中交换 offer/answer 的模式。模式 1 和模式 2 是在 RFC3261 中定义 的,用于不支持可靠临时响应消息(1xx-rel)的 SIP 实体之间的会话建立。模式
3、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 或
4、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:当
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)
6、发送 UPDATE 请求其中携带一个新的 offer, AS(或 UAC)在 200 UPDATE 中返回一个 offer。这样,会话参数便被更新。注意,UAS 或 UAC 在发送UPDATE 进行会话更新之前,必须保证之前的会话更新过程已经 完成。也就是说,发出的 offer 已经收到 answer,或者收到的 offer 已经产生了 answer。总 结INVITE 方法提供了会话建立过程。在没有 100rel 选项时,会话建立过程非常简单,只能使用 200INVITE 响应消息传送会话描述,这些会话描述可能是 answer(模式 1),也可能是 offer(模式 2) 。无论使用何种模式
7、,会话都只能呼叫完成后才能建立,在呼叫完成之前和呼叫完成之后只能有一个会话 用于最终通话的常规会话,因而,不能建立所谓的“早期媒体会话” 。在引入 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 协商好的,包的序列号是285902.2 主叫方发给被叫方的下一个 RTP 包,UDP 端口号是 SDP 协商好的,包的序列号是28591三、RTCP 媒体流3.1 每发完一批 RTP 包的时候,就发一个 RTCP 包,告诉接收方我刚才发了多少 RTP 包,多少个字节