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 進行處理,開始工作。