您当前的位置是:  首页 > 资讯 > 国内 >
 首页 > 资讯 > 国内 >

完整SIP/SDP媒体协商概论-SDP协商模式详解-answe处理

2020-03-16 09:03:45   作者:james.zhu    来源:Asterisk开源派   评论:0  点击:


  前面的章节笔者重点讨论了offer初始化流程的处理,包括基本的SDP协商模式的背景知识,针对发起方对offer消息中单播和多播环境处理。从本章节开始,我们继续介绍SDP协商中的接收方或者应答方的单播和多播媒体的应答处理(answer消息)。除了针对应答方生成answer的讨论以外,本章节的后续还将继续介绍关于SDP的媒体管理(修改必要会话描述参数),指示能力的讨论和一个交互模式的示例。
  5、构建offer消息的answer消息
  发起方提供了一个offer消息给应答方,同样,应答方answerer也会根据offer的消息回复一个answer信息。在answer的讨论中,笔者首先需要提醒读者需要注意几个媒体描述的设置("o=","m="行数和“t=”行),并且"m="中包含接受的媒体格式和不接受的媒体格式指示。通常来说,已提供的offer消息和它的answer是相互对应的,否则双方的交互没有办法完成。它们之间的绑定关系是通过"o="行来关联在一起。具体来讲,如果answer消息中的"o="行版本号和offer消息中的"o="行版本号不一致的话,那么,说明这answer消息是由不同的实体生成。另外,在offer中的每个"m="行必须对应相应的answer中的"m="行,answer中的"m="行必须包含和offer消息中完全一样的"m="行数。简单来说,offer中包含两行"m="行,answer必须也同样包含两行"m="行。当然,如果在offer消息中包含零行"m="行的话,answer中也是包含零行"m="行。一些情况下,这样规定的目的是为了保证媒体流格式按照一定的顺序来匹配。最后,会话时间是不能协商的,因此,在answer中的"t="行设置必须等于offer中的"t="设置。offer消息中提供的流可以因为各种原因被answer消息拒绝。进一步说明,如果offer的流媒体被拒绝的话,发起方和应答方双方一定不能生成针对此流媒体生成媒体流数据(或者RTCP报表数据)。对已拒绝的offer的媒体流,answer消息中相应的"m=0"行表示。任何的媒体格式列表要被忽略,至少保留一个媒体格式以支持指定的SDP。针对单播和多播流媒体来说,offer的流媒体的answer消息生成也有各自的流程。另外提醒读者,很多网关设备支持的默认媒体媒体格式的列表有自己的设置限制,有的网关可能至少支持一个媒体格式,最大支持4个媒体格式列表。有的可能更多,如果列表支持的最大数不能满足协商的列表的话,可能出现编码匹配或者协商机制的不兼容性。下面,我们针对answer消息的单播媒体流和多播媒体流的构建进行讨论。
  在生成应答的消息环境中,单播媒体流需要注意一些设置,特别是指向特征属性。注意,规范中的定义相对比较严格,为了保证能够完整准确的解释其官方的内容,笔者也只能遵从其用法,尽量不使用口语化的用词。这里的流媒体是一个总称,媒体流是指具体的音视频,数据等具体媒体格式。现在,我们说明在answer消息中关于指向属性的设置。读者一定要注意,这里有很多“如果”。如果发送的或者提供的流媒体使用的是一个单播地址,此媒体其应答的地址或answered的地址必须包含一个单播地址。如果提供的流媒体标记为sendonly状态,在answer消息中其相应的流媒体必须标记为recvonly 或者 inactive状态。如果在offer消息中,媒体流列为recvonly状态,在answer消息中其媒体流必须标记为sendonly或者 inactive状态。如果提供的媒体流标记为sendrecv(或如果在媒体级或会话级没有指向属性,这种情况下,媒体流默认的标记为sendrecv状态),在answer消息中相应的媒体流可以标记为sendonly,recvonly,sendrecv,或inactive的状态。如果提供的媒体流标记为inactive状态,此媒体流在answer消息中必须标记为inactive状态。指向属性讨论完以后,笔者再结合指向属性介绍一些关于"m="行以及其他相关属性设置。对于在answer消息中标记为recvonly状态的流媒体来说,其"m="行必须包含至少一个媒体格式,此媒体格式是应答方期望使用的媒体格式(在offer消息中包含的媒体格式列表中挑选),使用此媒体格式接收媒体。另外,此流媒体也可以指示另外其他的媒体格式,指示的媒体格式也不在offer消息中包含的媒体格式,应答方期望使用此媒体格式来接收媒体流。对于在anwer消息中标记为sendonly状态的流媒体,其"m="行必须包含至少一种媒体格式(此媒体格式在offer消息列表中的),应答方(answerer)使用此媒体格式发送媒体流。对于在answer中标记为sendrecv的流媒体,在"m="行必须至少包含一个媒体格式,其媒体格式表示应答方期望使用其媒体格式来发送和接收媒体流(在offer消息中包含的媒体格式列表中挑选)。流媒体也可以指示一个其他的媒体格式(此格式不在offer消息中的媒体列表中),应答方期望使用此媒体格式发送或接收媒体流。当然,此时,因为此媒体格式不在offer消息的媒体列表格式中,应答方还不能使用此媒体格式发送媒体流。对于answer中的媒体流标识为inactive的状态,实际使用场景比较复杂。对于在answer消息中标识为inactive的媒体流,其媒体格式的构建是基于offer消息中的媒体格式。具体来说:
  • 如果offer的消息是sendonly状态,answer中构建的媒体格式列表好像answer中的recvonly状态。
  • 如果offer的消息中标记的媒体流是recvonly的状态,answer中构建的媒体格式列表好像answer中的sendonly状态。
  • 如果offer的中的消息是sendrecv状态,answer中构建的媒体格式列表好像answer中的sendrecv状态。
  • 如果offer的中的消息是inactive状态,answer中构建的媒体格式列表好像这样一种状态,它们分别是,offer实际上是sendrecv状态,answer实际上是sendrecv状态。
  在answer消息中的连接地址和端口表示一个应答方期望接收媒体的地址(RTP和RTCP的地址,RTCP端口是默认比RTP端口高一位数的端口,否则必须明确说明)。现在,笔者讨论一下关于RTP的媒体格式使用以及其他参数设置。如果在offer消息中,一个特定的编码格式支持了一种指定的payload类型码的话,此指定的payload类型码也应该使用在answer的payload类型中。虽然在answer中使用了同样类型的payload类型号,answer也必须包含rtpmap属性来定义payload类型的映射,使用此映射支持动态的payload类型,并且在answer消息中应该包含payload类型映射支持静态的payload类型。在answer消息中,"m="行中的媒体格式列表应该按照偏好顺序来排列,列表中的第一个媒体格式是实际推荐的媒体格式。在这种情况下,推荐的媒体格式表示对端offerer应该使用answer消息中推荐列表的最高排序的媒体格式。简单来说,answerer通知offerer使用answer中的最高优先级编码格式。虽然answerer应答方可以根据自己的推荐媒体格式在answer消息中列出一个媒体格式推荐顺序列表,但是,除非有特别的原因,一般的推荐方式是,应答方应根据出现在offer中的列表的格式顺序列出answer中的推荐列表。换句话说,如果出现在offer中的媒体流的语音编码格式顺序是8,22和48,answerer支持的语音编码是8和48的话,根据一般的推荐方式,如果answerer没有任何理由修改这个顺序的话,在answer中的语音编码的顺序应该是8和48,而不是48和8的顺序。这样可以保持双向编码一致,降低了编码协商的多余处理步骤。answerer可以包括一个非零的ptime属性来支持任何媒体格式,这表示应答方期望使用此打包时长来接收媒体。对于一个媒体流来说,针对每个方向的媒体流打包时长可以不同,不一定是一样的。应答方也可以包括一个带宽属性支持任何媒体流,此带宽表示answerer应答方希望发起方发送媒体时使用的带宽。带宽属性可以为零,这表示无媒体发送,使用RTP的场景中,answerer同时也关闭了RTCP。针对一个某个由发起方的媒体流,如果answerer没有对此媒体流提供任何媒体格式的话,answerer必须设置端口为零来拒绝此媒体。但是,如果answerer对所有的媒体没有提供媒体格式的话,发起方提供的整个会话将会被answerer拒绝。
  现在,我们继续讨论answerer发送answer后的处理流程。一旦answerer已经发送了answer消息,answerer必须准备好接收在answer消息中标识为recvonly的媒体。answerer必须准备好发送和接收在answer消息中标识为sendrecv的媒体流,并且它也可能马上发送媒体流。answerer必须准备好接收媒体流,此媒体流是在answer消息中发送的,并且标记为recvonly或者sendrecv的任何媒体流格式,并且answerer也可能马上发送媒体流。当应答方answerer发送媒体流的时候,如果offer消息中出现了ptime打包时长的话,应答方应该使用和offer消息中设定的ptime相等的打包时长来处理发送的媒体流。当应答方answerer发送媒体流的时候,如果收到的offer消息中出现了带宽设置的话,应答方应该使用不高于offer消息中设定的带宽来处理发送媒体流。answerer必须使用offer消息中列出的媒体格式,同时也是在answer消息中列出的媒体格式发送媒体流,并且应该使用offer消息中推荐优先级最高的编码格式,同时也是在answer列表中的编码格式。这里提醒读者,通常,在生产环境中,我们可能使用所谓的使用本地推荐编码或者远端推荐编码的方式来进行编码协商处理设置,每个厂家所支持的设置方式不同,读者可以查阅一些厂家语音产品的设置。笔者在后续章节的延伸讨论中会做进一步的介绍。在RTP使用场景中,虽然有时answer消息中的payload类型号和offer的payload类型号有所区别,answerer必须使用offer消息中的payload类型号。以上是关于单播媒体流在answerer中的answer消息构建的核心讨论。接下来,笔者继续讨论多播媒体流在answerer中关于answer消息构建的规范。
  多播媒体流在answerer中关于answer和单播媒体流的处理有一定的差别,一些基础的设置是相同的。我们这里简要介绍多播媒体流在answerer方的构建处理规范。和单播媒体流的offer/answer交互模式不同,从单播媒体流的角度可以看到双向的媒体流流程,但是多播媒体流的交互模式下,我们仅能看到一个媒体流。如果严格地讲,对一个多个offer流媒体生成一个answer消息通常会涉及到修改流媒体的一些限定选项参数。如果接受了一个多媒体流的话,在answer消息中的地址和端口消息必须匹配offer消息中的地址和端口信息。同样,在answer中的指向消息(sendonly,recvonly,或者sendrecv)必须和offer消息中的指向消息相同。因为,RFC 2327针对多参与方的一种前提假设,在一个多会话中,所有的参与方需要会话参数的等同理解。在answer消息中,一个媒体格式集必须等于offer中的媒体集或媒体集的子集。answerer应答方通过移除一个媒体格式来对offerer发起方表示应答方不支持此媒体格式。如果在answer中出现了ptime的话,在answer中的ptime和bandwidth带宽必须等于offer消息中的ptime和bandwidth带宽。如果在answer中没有出现ptime,在answer中可以增加一个非零的ptime值。
  6、发起方Offerer对answer信息处理
  前面,我们讨论了answerer应答方如何生成answer消息。现在,笔者讨论发起方是如何接收answer消息的。当发起方收到answer的消息以后,offerer发起方可以通过流数据来发送媒体内容(假设在answer消息中标识的指向是sendrecv 或者recvonly)。这时,作为offerer发起方,它发送媒体流时必须使用answer中的媒体格式列表中的媒体格式,并且应该使用answer媒体格式列表中的第一个媒体格式。读者注意,这里笔者强调的是应该使用,而不是必须使用,因为在answerer端规定的也是“应该使用”,不是必须使用,通常情况下,双方的编码常常需要及时修改保证协商的及时性。例如,在双方通话的无声时段,一个终端可能想切换到一个舒适噪音的编码(参考RFC3389),另外,有时终端可能通过终端面板摁DTMF按键发送DTMF按键音。除了一些必要的应用场景需要推荐“应该使用”,很多时候,拥塞控制也根据对端的响应强迫用户不得不使用相对低速率的编码。在拥塞控制的草案中涉及了一个控制模型,读者有兴趣的话可以进一步学习:
  资源来源:https://tools.ietf.org/html/draft-ietf-rmcat-cc-codec-interactions-02
  offerer应该基于answer消息中的ptime和bandwidth带宽发送媒体。有一种媒体格式发起方可能会马上终止监听。具体来说,offerer可以马上终止侦听媒体格式,这种媒体格式是在初始化offer中列出的,但是没有出现在收到的answer消息中的媒体格式。
  后续还将继续介绍关于SDP的媒体管理(修改会话描述参数),指示能力的讨论和一个交互模式的示例。
  参考资料:
  https://tools.ietf.org/id/draft-ietf-mmusic-ice-sip-sdp-14.html
  https://tools.ietf.org/html/draft-ietf-rmcat-cc-codec-interactions-00
 
  关注微信公众号:asterisk-cn,获得有价值的Asterisk行业分享
  Asterisk freepbx FreeSBC技术文档: www.freepbx.org.cn
  融合通信/IPPBX商业解决方案:www.hiastar.com
  如何使用FreeSBC,qq技术分享群:334023047, www.freesbc.cn
 

【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

相关热词搜索: SIP/SDP

上一篇:抗疫持久战 呼叫中心应优选远程坐席

下一篇:最后一页

相关阅读:

专题

CTI论坛会员企业