【MRCPv2协议介绍】SIP Session Example

MRCPv2 是 Media Resource Control Protocol Version 2 (MRCPv2)的缩写,这一篇翻译RFC6787一节4.3. SIP Session Example

4.3. SIP Session Example

第一个示例展示了使用 SIP 路由到适当资源的强大功能。 在示例中,请注意在对 [email protected] 的 INVITE 中使用了对域语音服务器服务的请求。 域中的 SIP 路由机制找到实际服务器 [email protected],它在 200 OK 中返回。 请注意,“cmid”在第 4.4 节中定义。

此示例交换为合成器添加资源控制通道。 由于合成器也会生成音频流,因此此交互还会创建一个只接收实时协议 (RTP) [RFC3550] 媒体会话,供服务器将音频发送到。 带有媒体源/接收器的 SIP 对话独立于 MRCP,因此未显示。

Example: Add Synthesizer Control Channel

C->S:

          INVITE sip:[email protected] SIP/2.0
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf1
          Max-Forwards:6
          To:MediaServer <sip:[email protected]>
          From:sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314161 INVITE
          Contact:<sip:[email protected]>
          Content-Type:application/sdp
          Content-Length:...

          v=0
          o=sarvi 2890844526 2890844526 IN IP4 192.0.2.12
          s=-
          c=IN IP4 192.0.2.12
          t=0 0
          m=application 9 TCP/MRCPv2 1   # 这里制定了MRCP协议
          a=setup:active                 # 客户端发起,active
          a=connection:new               # 是一个新的链接
          a=resource:speechsynth         # 资源是 语音合成
          a=cmid:1
          m=audio 49170 RTP/AVP 0
          a=rtpmap:0 pcmu/8000
          a=recvonly                   #注意 语音合成, 客户端是只收语音流
          a=mid:1

S->C:

          SIP/2.0 200 OK
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf1;received=192.0.32.10
          To:MediaServer <sip:[email protected]>;tag=62784
          From:sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314161 INVITE
          Contact:<sip:[email protected]>
          Content-Type:application/sdp
          Content-Length:...

          v=0
          o=- 2890842808 2890842808 IN IP4 192.0.2.11
          s=-
          c=IN IP4 192.0.2.11
          t=0 0
          m=application 32416 TCP/MRCPv2 1
          a=setup:passive   # 服务端接受,passive
          a=connection:new
          a=channel:32AECB234338@speechsynth   # 服务端生成一个channel
          a=cmid:1
          m=audio 48260 RTP/AVP 0
          a=rtpmap:0 pcmu/8000
          a=sendonly     #注意 语音合成, 服务端是只发语音流
          a=mid:1

C->S:

          ACK sip:[email protected] SIP/2.0
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf2
          Max-Forwards:6
          To:MediaServer <sip:[email protected]>;tag=62784
          From:Sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314161 ACK
          Content-Length:0

Example: Add Recognizer

C->S:

          INVITE sip:[email protected] SIP/2.0
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf3
          Max-Forwards:6
          To:MediaServer <sip:[email protected]>;tag=62784
          From:sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314162 INVITE
          Contact:<sip:[email protected]>
          Content-Type:application/sdp
          Content-Length:...

          v=0
          o=sarvi 2890844526 2890844527 IN IP4 192.0.2.12
          s=-
          c=IN IP4 192.0.2.12
          t=0 0
          m=application 9 TCP/MRCPv2 1
          a=setup:active
          a=connection:existing  # 注意这里的状态是existing,不再是new
          a=resource:speechsynth 
          a=cmid:1
          m=audio 49170 RTP/AVP 0 96
          a=rtpmap:0 pcmu/8000
          a=rtpmap:96 telephone-event/8000
          a=fmtp:96 0-15
          a=sendrecv   #注意 改成了收发同时
          a=mid:1
          m=application 9 TCP/MRCPv2 1
          a=setup:active
          a=connection:existing
          a=resource:speechrecog   # 添加一个新的
          a=cmid:1

S->C:

          SIP/2.0 200 OK
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf3;received=192.0.32.10
          To:MediaServer <sip:[email protected]>;tag=62784
          From:sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314162 INVITE
          Contact:<sip:[email protected]>
          Content-Type:application/sdp
          Content-Length:...

          v=0
          o=- 2890842808 2890842809 IN IP4 192.0.2.11
          s=-
          c=IN IP4 192.0.2.11
          t=0 0
          m=application 32416 TCP/MRCPv2 1
          a=setup:passive
          a=connection:existing
          a=channel:32AECB234338@speechsynth
          a=cmid:1
          m=audio 48260 RTP/AVP 0 96
          a=rtpmap:0 pcmu/8000
          a=rtpmap:96 telephone-event/8000
          a=fmtp:96 0-15
          a=sendrecv
          a=mid:1
          m=application 32416 TCP/MRCPv2 1
          a=setup:passive
          a=connection:existing
          a=channel:32AECB234338@speechrecog   # 新增加的语音识别channel
          a=cmid:1

C->S:

          ACK sip:[email protected] SIP/2.0
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf4
          Max-Forwards:6
          To:MediaServer <sip:[email protected]>;tag=62784
          From:Sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314162 ACK
          Content-Length:0

此示例从上图继续,并为识别器分配一个额外的资源控制通道。
由于识别器需要接收音频流以进行识别,因此此交互还将音频流更新为 sendrecv,使其成为双向 RTP 媒体会话。


Example: Deallocate Recognizer

C->S:

          INVITE sip:[email protected] SIP/2.0
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf5
          Max-Forwards:6
          To:MediaServer <sip:[email protected]>;tag=62784
          From:sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314163 INVITE
          Contact:<sip:[email protected]>
          Content-Type:application/sdp
          Content-Length:...

          v=0
          o=sarvi 2890844526 2890844528 IN IP4 192.0.2.12
          s=-
          c=IN IP4 192.0.2.12
          t=0 0
          m=application 9 TCP/MRCPv2 1
          a=resource:speechsynth
          a=cmid:1
          m=audio 49170 RTP/AVP 0
          a=rtpmap:0 pcmu/8000
          a=recvonly
          a=mid:1
          m=application 0 TCP/MRCPv2 1
          a=resource:speechrecog
          a=cmid:1

S->C:

          SIP/2.0 200 OK
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf5;received=192.0.32.10
          To:MediaServer <sip:[email protected]>;tag=62784
          From:sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314163 INVITE
          Contact:<sip:[email protected]>
          Content-Type:application/sdp
          Content-Length:...

          v=0
          o=- 2890842808 2890842810 IN IP4 192.0.2.11
          s=-
          c=IN IP4 192.0.2.11
          t=0 0
          m=application 32416 TCP/MRCPv2 1
          a=channel:32AECB234338@speechsynth
          a=cmid:1
          m=audio 48260 RTP/AVP 0
          a=rtpmap:0 pcmu/8000
          a=sendonly
          a=mid:1
          m=application 0 TCP/MRCPv2 1
          a=channel:32AECB234338@speechrecog
          a=cmid:1

C->S:

          ACK sip:[email protected] SIP/2.0
          Via:SIP/2.0/TCP client.atlanta.example.com:5060;
           branch=z9hG4bK74bf6
          Max-Forwards:6
          To:MediaServer <sip:[email protected]>;tag=62784
          From:Sarvi <sip:[email protected]>;tag=1928301774
          Call-ID:a84b4c76e66710
          CSeq:314163 ACK
          Content-Length:0

此示例从上图继续并取消分配识别器通道。 由于识别器不再需要接收音频流,因此此交互还将 RTP 媒体会话更新为 recvonly

猜你喜欢

转载自blog.csdn.net/mimiduck/article/details/128266891