- MRCP协议学习笔记-MRCP背景知识介绍
- MRCP协议学习笔记-语音处理的基本原理
- MRCP协议学习笔记-MRCP概要
- MRCP学习笔记 - 通过SIP协议实现会话管理
- MRCP协议学习笔记-控制会话中的消息类型说明
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