当前位置: 首页 > 工具软件 > UniMRCP > 使用案例 >

unimrcp client 和 server 简述

顾俊誉
2023-12-01

一、unimrcp client

1 client 栈初始化

1.1 创建 client 栈实例

通常情况下,每一个 client 栈都由一个进程创建,默认情况下 client 的配置是从配置文件中加载的,但也可以通过调用 API 来创建和初始化堆栈。配置项的由结构体 apt_dir_layout 指定。
源码:

apt_dir_layout_t *dir_layout = apt_default_dir_layout_create(root_dir_path,pool);
mrcp_client_t *mrcp_client = unimrcp_client_create(dir_layout);

1.2 创建一个 application 实例

可以创建一个或多个 mrcp_application_t 实例并注册到 client 栈。mrcp_application_t 的实例其实就是用户应用程序和 client 交流的逻辑表示。
创建时必须提供消息处理程序(mrcp_app_message_handler_f)应用程序实例的。处理程序用于接收从客户端堆栈发送的消息
源码:

mrcp_application_t *mrcp_app = mrcp_application_create(app_message_handler,engine,pool);
mrcp_client_application_register(mrcp_client,mrcp_ap,name;

1.3 开启消息处理循环

客户端堆栈一直在循环运行,等待来自注册用户应用程序的消息和/或其他内部任务。

  • 同步启动
    默认情况下,客户端堆栈是同步启动的。这意味着在初始化客户端堆栈并准备好处理之前,将阻止调用用户应用程序
    启动源码:
mrcp_client_start(mrcp_client);
  • 异步启动
    为了异步启动客户机堆栈,mrcp_client_handler_f 类型的事件处理程序必须在尝试启动消息循环之前设置。这将允许释放初始化堆栈时调用的用户应用程序。一旦客户机堆栈准备好处理消息,就将异步调用注册的处理程序。需要注意的是,在调用处理程序之前,应用程序不能发送任何请求。
    启动源码:
mrcp_client_async_start_set(mrcp_client,handler);
mrcp_client_start(mrcp_client);

2 MRCP Session 初始化

2.1 创建一个 MRCP Session 实例

mrcp_session_t *mrcp_session = mrcp_application_session_create(mrcp_app,profile,NULL);

2.2 创建一个 MRCP 资源通道实例

mrcp_channle_t *mrcp_channel = mrcp_application_channel_create(
mrcp_session, MRCP_RECOGNIZER_RESOURCE, termination, NULL, obj);

2.3 添加资源通道到 Session

mrcp_application_channel_add(mrcp_session,mrcp_channel);

通过以上步骤以后, client 栈将向 MRCP server 发送一个添加资源通道的请求。这个请求是异步的。当 client 栈的回调函数 on_channel_add 被调用时,user application 就获取到响应。

3 MRCP 消息管理

3.1 发送一个 MRCP 请求

mrcp_application_message_send(mrcp_session,mrcp_channel,mrcp_message);

这个函数发送一个请求给 MRCP server,而响应将是异步接收。

3.2 接收一个 MRCP 响应或事件

on_message_receive(mrcp_app,mrcp_session_mrcp_channel,mrcp_message);

在收到来自 MRCP server 的响应或事件时,将调用这个回调函数。

4 MRCP Session 取消

4.1 移除 MRCP 资源通道

已分配的 MRCP 资源通道可以选择性的释放。否则的话,资源通道在 Session终止的时候也会释放。

mrcp_application_channel_remove(mrcp_session,mrcp_channel);

调用这个函数将会给 MRCP server 发送一个移除资源通道的请求。这个请求的处理是异步的。当 client 栈的回调函数 on_channel_remove 被调用时,即 user application 收到了响应。

4.2 终止 MRCP Session

mrcp_application_session_terminate(mrcp_session);

调用这个函数,将会给 MRCP server 发送一个终止 Session 的请求。当函数 on_session_terminate 被调用时,即 user application 接收到了响应。需要注意的是,在 Session 的生命周期内,Session 是可以随时终止的。

4.3 销毁一个 MRCP Session

mrcp_application_session_destroy(mrcp_session);

调用这个函数将通过释放 Session 的内存来最终销毁 MRCP Session。需要注意的是,只有在收到 session 终止请求的响应时,Session 才能被终止及销毁。

4 Client 栈的取消

4.1 关闭 Client 栈

mrcp_client_shutdown(mrcp_client);

调用这个函数将停止消息循环,并且停止所有在 Client 栈上的活动。

4.2 销毁 Client 栈

mrcp_client_destroy(mrcp_client);

调用这个函数来最终销毁 client 栈和释放所有已申请的内存。

二、unimrcp server

1 Server 栈初始化

通常,一个 Server 栈的实例也是由一个进程创建的。server 的配置也是加载的配置文件,并且配置的内容存储在结构体 apt_dir_layout_t 中。

/* create default directory layout relative to root directory path */
apt_dir_layout_t *dir_layout = apt_default_dir_layout_create(root_dir_path,pool);
/* start server stack processing */
mrcp_server_t *server = unimrcp_server_start(dir_layout);

2 Server 栈的销毁

/* shutdown server stack processing */
unimrcp_server_shutdown(server);

通过调用以上函数,停止消息循环,终止 server 栈上的一切活动,最后销毁 server 栈。

 类似资料: