unimrcp源码窥探及task异步架构的学习(二)(MRCP Client)

2024-02-28 19:58

本文主要是介绍unimrcp源码窥探及task异步架构的学习(二)(MRCP Client),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Framework Agent 创建过程中,虚方法表中的方法都实现了。

在启动task的过程中,会触发on_start_complete事件。MRCP Client 正是在这个事件中创建的。

所以让我们来看看这个事件中完成了哪些工作。

 

一、创建mrcp client

  1. 首先创建mrcp client客户端堆栈,即得到mrcp_client_t结构。

unimrcp_client_create

  →unimrcp_client_init(源文件:\platforms\libunimrcp-client\src\unimrcp_client.c)

            → mrcp_client_create(源文件:\libs\mrcp-client\src\mrcp_client.c), 

                          跟创建Framework Agent类似,使用apt_consumer_task_t结构,创建MRCP Client的task实体。再把MRCP Client的虚方法表中的三个方法实现:

                  → apt_consumer_task_create

     vtable->process_msg= mrcp_client_msg_process;

     vtable->on_start_complete = mrcp_client_on_start_complete;

     vtable->on_terminate_complete = mrcp_client_on_terminate_complete;

2.依赖配置文件的内容加载UniMRCP client

 

unimrcp_client_load是处理函数,unimrcp_client_doc_parse函数将xml配置文件解析成相关的结构。再调用unimrcp_client_doc_process函数进行处理,将配置文件的内容加载到MRCP Client中。xml文件的根节点unimrcpclient下,有如下节点:

  • properties

  • components

         resource-factory:Factory of MRCP resources

        sip-uac:SofiaSIP MRVPv2   signaling agent 

                     (详细请见文章【unimrcp源码窥探及task异步架构的学习(三)(SofiaSIP Agent)】)

        rtsp-uac: UniRTSP MRCPv1 signaling agent

        mrcpv2-uac:MRCPv2 connection agent

        media-engine:Media processing engine

        rtp-factory:Factory of RTP terminations

  • settings

  • profiles

  • misc

 

 

二、创建mrcp application 

mrcp_application_t类型的结构体,定义了mrcp application,它从mrcp client中获取请求、或者发送请求。

mrcp_application_create函数,是创建处理的入口函数。

 

三、 将创建好的application注册到mrcp client中

 

四、启动mrcp client 进行处理,开始工作。

 

这篇关于unimrcp源码窥探及task异步架构的学习(二)(MRCP Client)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/756465

相关文章

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Java汇编源码如何查看环境搭建

《Java汇编源码如何查看环境搭建》:本文主要介绍如何在IntelliJIDEA开发环境中搭建字节码和汇编环境,以便更好地进行代码调优和JVM学习,首先,介绍了如何配置IntelliJIDEA以方... 目录一、简介二、在IDEA开发环境中搭建汇编环境2.1 在IDEA中搭建字节码查看环境2.1.1 搭建步