Framework Agent 创建过程中,虚方法表中的方法都实现了。
在启动task的过程中,会触发on_start_complete事件。MRCP Client 正是在这个事件中创建的。
所以让我们来看看这个事件中完成了哪些工作。
一、创建mrcp client
首先创建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 进行处理,开始工作。