SIP 应答模型
SDP与SIP的使用在SDP提议回答RFC 3264中给出。SIP中的默认消息体类型是 application / sdp 。
主叫方列出他们愿意在SDP中接收的媒体能力,通常在INVITE或ACK中。
被叫方在对INVITE的200 OK响应中列出它们的媒体能力。
SDP的典型SIP使用包括以下字段:版本,起源,主题,时间,连接以及一个或多个媒体和属性。
主题和时间字段不由SIP使用,但包括为了兼容性。
在SDP标准中,主题字段是必填字段,必须包含至少一个字符,如果没有主题,建议为s = - 。
时间字段通常设置为t = 00.SIP使用连接,媒体和属性字段在UA之间建立会话。
原始字段对SIP的使用有限。
session-id通常在整个SIP会话中保持不变。
每次更改SDP时,版本都会增加。如果发送的SDP与之前发送的SDP没有变化,则版本保持不变。
由于要使用的媒体会话和编解码器的类型是连接协商的一部分,SIP可以使用SDP来指定多个替代媒体类型并且选择性地接受或拒绝那些媒体类型。
offer / answer规范RFC 3264建议对每个媒体字段使用包含a = rtpmap:的属性。 通过将SDP响应中相应的媒体字段的端口号设置为零来拒绝媒体流。
例子
在以下示例中,呼叫者Tesla想要使用两个可能的音频编解码器和在初始INVITE中携带的SDP中的视频编解码器来建立音频和视频呼叫 -
v = 0 o = John 0844526 2890844526 IN IP4 172.22.1.102 s = - c = IN IP4 172.22.1.102 t = 0 0 m = audio 6000 RTP/AVP 97 98 a = rtpmap:97 AMR/16000/1 a = rtpmap:98 AMR-WB/8000/1 m = video 49172 RTP/AVP 32 a = rtpmap:32 MPV/90000
编解码器由RTP / AVP配置文件编号97,98引用。
被叫方Marry应答呼叫,为第一媒体字段选择第二编解码器,并且拒绝第二媒体字段,只想要AMR会话。
v = 0 o = Marry 2890844526 2890844526 IN IP4 172.22.1.110 s = - c = IN IP4 200.201.202.203 t = 0 0 m = audio 60000 RTP/AVP 8 a = rtpmap:97 AMR/16000 m = video 0 RTP/AVP 32
如果此仅音频呼叫不可接受,则Tom将发送ACK,然后发送BYE以取消呼叫。否则,将建立音频会话并交换RTP分组。
如该示例所示,除非保持媒体字段的数量和顺序,否则呼叫方将不知道被叫方正在接受和拒绝哪些媒体会话。
提供/回答规则在以下部分中总结。
生成要约的规则
SDP报价必须包括所有必需的SDP字段(这包括v =,o =,s =,c =和t =)。 这些是SDP中的必填字段。
它通常包括一个媒体字段( m = ),但它不必。 媒体行包含按优先顺序列出的所有编解码器。唯一的例外是,如果端点支持大量的编解码器,最可能被接受或最优选应该被列出。不同的媒体类型包括音频,视频,文本,MSRP,BFCP等。
生成答案的规则
SDP对报价的回答必须根据以下规则构建:
答案必须具有与答案相同顺序的相同数量的 m = 行。
可以通过将端口号设置为0来拒绝单个媒体流。
通过发送非零端口号接受流。
每个媒体类型的列出的有效载荷必须是报价中列出的有效载荷的子集。
对于动态有效载荷,不需要在每个方向上使用相同的动态有效载荷数。通常,只选择单个有效载荷。
修改会话的规则
任一方可以发起另一个提议/应答交换以修改会话。修改会话时,必须遵循以下规则:
原始( o = )线路版本号必须与发送的最后一个版本号相同,这表示此SDP与前一个交换相同,或者可以递增一,表示新 必须解析的SDP。
优惠必须包含所有现有媒体行,并且必须按相同的顺序发送。
附加的媒体流可以添加到 m = 行列表的末尾。
可以通过将端口号设置为0来删除现有媒体流。此媒体行必须保留在SDP中以及此会话的所有将来的提供/应答交换。
呼叫保持
呼叫中的一方可以暂时将另一方暂停。这通过发送具有与原始INVITE的SDP相同的SDP但具有 a = sendonly 属性的INVITE来完成。
通过发送具有 a = sendrecv 属性的另一个INVITE,该调用再次激活。下图显示了呼叫保持的呼叫流程。