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

在前面的分享中,我们简单介绍了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-idstatus-code request-state

此格式的前三个值的含义和请求中的格式是一样的,我们这里不再介绍。媒体资源服务器端响应消息中增加了status-code 和request-state。

这里的状态码和SIP中的状态码也基本类似。2xx 表示成功状态码;4xx表示客户端错误码;5xx表示服务器端错误码。

请求状态事件(request-state)刚才我们做了介绍,表示媒体资源服务器端对请求的处理响应。具体的格式为:

MRCP/2.0 79 10000 200IN-PROGRESS

Channel-Identifier: 43b9ae17@speechsynth

以上消息表示媒体资源服务器正在处理此通道的语音合成请求。

5

在媒体资源服务器的消息中会携带事件消息,其消息内容表示了对MRCP客户端请求的事件正在处理的状态,在一个会话过程中,可能有几个不同的事件进行更新。事件消息体支持了不同的事件状态来表示处理状态,其基本格式为:

MRCP/2.0 message-lengthevent-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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180526G0JIKR00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券