您当前的位置是:  首页 > 新闻 > 国内 >
 首页 > 新闻 > 国内 >

MRCP协议学习笔记-控制会话中的消息类型说明

2018-05-28 10:30:05   作者:   来源:CTI论坛   评论:0  点击:


  在前面的分享中,我们简单介绍了MRCP客户端与服务器端如何通过TCP对会话通道进行管理。现在我们对控制通道的管理进行更加详细地介绍,具体介绍的内容包括:不同的消息类型,其消息结构,消息交互的模式,定义和获取会话参数的机制,媒体资源服务器所使用的标准头消息体。因为我们内容和篇幅的关系,我们分为几个部分来逐步介绍以上内容,今天的讲座仅覆盖控制会话的第一部分内容-三种不同的消息类型。
  1、我们前面的概要中已经介绍过,MRCP 支持了三种类型的MRCP消息。这三种消息可以支持整个MRCP协商的流程。它们分别是:request 消息,response消息和event消息。MRCP 客户端对媒体资源服务器端发起一个请求,然后媒体资源服务器端会响应一个消息,媒体资源服务器对每个请求消息绑定一个事件状态的消息,通知客户端请求的处理状态。以下实例是一个最简单的处理流程,媒体服务器端立即回复了一个所有事件完成的消息。
  在下面的示例中则包含了多个事件响应消息,使用这些事件消息来说明媒体资源服务器对事件的处理状态,让客户端能够获悉当前事件的状态。
  在MRCP的事件状态中,事件状态包含了三种不同的状态消息:COMPLETE,PENDING和IN-PROGRESS。
  2、MRCP 事件状态都表示了各自不同的处理流程。如果熟悉SIP事件的读者可能也了解SIP的消息事件,MRCP的事件状态事实上和SIP的没有太大的差别。我们从字面意思都可以理解每个状态的含义。我们这里介绍一下三种状态的具体含义:
  • PENDING:表示此请求已经在媒体资源服务器的请求队列中,等待处理。处理流程是按照先进先出的方式进行,需要进一步的事件更新。
  • IN-PROGRESS:表示请求正在被处理,还没有完成,需要进一步的事件更新。
  • COMPLETE:表示此请求已经完成,媒体资源服务器不会对MRCP客户端继续发送任何关于此请求的响应消息。
  3、请求消息有时也称之为:request methods。它具有自己特定的语法格式,它是由MRCP客户端发起。其初始格式为:
  MRCP/2.0 message-length method-name request-id
  第一部分表示MRCP版本,一般情况下,都是一样的内容。message-length则设定了消息体的长度,它包括了起始行,头域值和消息体本身。
  method-name则根据客户端对不同的媒体资源类型请求来支持不同的method。SPEAK是针对语音合成的媒体资源类型来说的;RECOGNIZE则对语音识别来说的。另外SET-PARAMS 和 GET-PARAMS是支持所有媒体类型,支持设置媒体类型参数和获取参数。
  request-id是一个唯一的请求ID,一个32bit的整数值,初始化时,此值比较小,以后在此会话中,因为不断创建新的请求,此值会逐渐递增。以下是一个请求示例的消息内容:
  MRCP/2.0 267 SPEAK 10000
  Channel-Identifier: 43b9ae17@speechsynth
  Content-Type: application/ssml+xml
  Content-Length: 150
  
  
  xmlns="http://www.w3.org/2001/10/synthesis">
  Hello world!
  
  4、响应消息是由媒体资源服务器返回的消息,其起始格式为:
  MRCP/2.0 message-length request-id status-code request-state
  此格式的前三个值的含义和请求中的格式是一样的,我们这里不再介绍。媒体资源服务器端响应消息中增加了status-code 和request-state。
  这里的状态码和SIP中的状态码也基本类似。2xx 表示成功状态码;4xx表示客户端错误码;5xx表示服务器端错误码。



  请求状态事件(request-state)刚才我们做了介绍,表示媒体资源服务器端对请求的处理响应。具体的格式为:
  MRCP/2.0 79 10000 200 IN-PROGRESS
  Channel-Identifier: 43b9ae17@speechsynth
  以上消息表示媒体资源服务器正在处理此通道的语音合成请求。
  5、在媒体资源服务器的消息中会携带事件消息,其消息内容表示了对MRCP客户端请求的事件正在处理的状态,在一个会话过程中,可能有几个不同的事件进行更新。事件消息体支持了不同的事件状态来表示处理状态,其基本格式为:
  MRCP/2.0 message-length event-name request-id request-state
  前面两个值和请求响应的是一样的。在事件消息中增加了event-name, request-id和request-state。
  event-name表示一个特定的事件。不同的资源媒体类型可以提供不同的事件消息名称。例如,SPEAK-COMPLETE是针对语音合成的媒体资源类型来说的,而RECOGNITION-COMPLETE则是针对语音识别媒体资源类型来说的。
  request-id是相对应请求中的事件。这里要注意,事件支持对请求处理的结果进行发送,它不会任意发送。
  request-state表示媒体资源服务器当前对请求的处理状态,我们前面也做了介绍,不再做更多介绍。下面的示例说明,媒体资源服务器生成的响应事件消息,媒体资源服务器正在进行语音识别的事件处理,event-id是10000,检测的是DTMF输入。
  MRCP/2.0 109 START-OF-INPUT 10000 IN-PROGRESS
  Channel-Identifier: 43b9ae17@speechrecog
  Input-Type: dtmf
  MRCP/2.0 109 START-OF-INPUT 10000 IN-PROGRESS
  Channel-Identifier: 43b9ae17@speechrecog
  Input-Type: dtmf
  MRCP/2.0 109 START-OF-INPUT 10000 IN-PROGRESS
  Channel-Identifier: 43b9ae17@speechrecog
  Input-Type: dtmf
  6、在本章节的学习中,笔者首先介绍了MRCP中的三种消息体类型,然后介绍了事件消息体的三种事件消息,笔者进一步说明了请求消息体格式,响应消息体格式和事件消息体的格式,根据不同的格式介绍了具体的数值内容和响应的示例。通过以上完整的介绍,读者可以非常清楚地了解MRCP消息的基本结构和其具体的含义。在接下来的章节中,我们会更加详细地介绍消息体,头域值和基本的头域值内容。
      

  unimrcp-MRCP协议学习分享,QQ群号:208136295
  关注微信公众号:asterisk-cn,获得有价值的行业分享
  freepbx 技术论坛:www.ippbx.org.cn
  Asterisk, freepbx技术文档: www.freepbx.org.cn
  欧米(Omni)智能客服解决方案
  融合通信商业解决方案,协同解决方案首选产品:www.hiastar.com

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

专题