下面是一个典型的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