unimrcp client 和 server 简述

一、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 栈。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TCP(传输控制协议)是一种可靠的、面向连接的协议,用于在网络上的客户端和服务器之间进行通信。在Python中,您可以使用内置的socket模块来创建TCP客户端和服务器。 TCP客户端: ```python import socket # 创建TCP客户端套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 服务器的IP地址和端口号 server_ip = '127.0.0.1' # 服务器IP地址 server_port = 12345 # 服务器端口号 # 连接服务器 client_socket.connect((server_ip, server_port)) # 发送数据给服务器 data = 'Hello, server!' client_socket.send(data.encode()) # 接收服务器返回的数据 response = client_socket.recv(1024).decode() print('Server response:', response) # 关闭客户端套接字 client_socket.close() ``` TCP服务器: ```python import socket # 创建TCP服务器套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 绑定服务器IP地址和端口号 server_ip = '127.0.0.1' # 服务器IP地址 server_port = 12345 # 服务器端口号 server_socket.bind((server_ip, server_port)) # 监听客户端连接 server_socket.listen(1) print('Server is listening for incoming connections...') while True: # 接受客户端连接请求 client_socket, client_address = server_socket.accept() print('Connected with', client_address) # 接收客户端发送的数据 data = client_socket.recv(1024).decode() print('Received from client:', data) # 向客户端发送响应数据 response = 'Hi, client!' client_socket.send(response.encode()) # 关闭客户端套接字 client_socket.close() ``` 以上是一个简单的TCP客户端和服务器的示例,客户端通过套接字连接到服务器,并发送数据,服务器接收数据并返回响应。请注意,这只是一个基本示例,实际应用中还需要处理异常情况、并发连接等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值