FreeSwitch模块mod_unimrcp配置数据库化初探
在我们使用FreeSwitch对接mrcp时,最常用的方式就是mod_unimrcp模块,但mod_unimrcp模块需要对conf/mrcp_profiles/这里进行对应的mrcp配置,在这里一定要记住,这里的unimrcp是作为client去和其它第三方的mrcp server对接,由mrcp server和asr/tts打交道。
不管是asr还是tts,对于unimrcp的配置都差不多,只是在一些参数调整上会存在一定的差别。以下示例为一个使用科大讯飞的mrcp v2的unimrcp在FreeSwitch中的配置示例:
1. <include>
2. <profile name="xfmrcpv2asr" version="2">
3. <param name="client-ip" value="172.100.0.217"/>
4. <param name="client-port" value="8101"/>
5. <param name="server-ip" value="172.100.0.200"/>
6. <param name="server-port" value="5070"/>
7. <param name="sip-transport" value="udp"/>
8. <param name="rtp-ip" value="172.100.0.200"/>
9. <param name="rtp-port-min" value="30000"/>
10. <param name="rtp-port-max" value="58000"/>
11. <param name="rtcp" value="1"/>
12. <param name="rtcp-bye" value="2"/>
13. <param name="rtcp-tx-interval" value="5000"/>
14. <param name="rtcp-rx-resolution" value="1000"/>
15. <param name="codecs" value="PCMU PCMA L16/96/8000"/>
16. <synthparams>
17. </synthparams>
18. <recogparams>
19. </recogparams>
20. </profile>
21.</include>
但这样存在一个问题,每增加一个服务器对接,都需要去在conf/mrcp_profiles下做类似的配置,那么可不可以直接配置到数据库中呢?肯定可以啦。
问题在mod_unimrcp.c这个实现中去对以下几个函数进行数据库化的处理:
process_profile_config
process_rtp_config
process_mrcpv1_config ,只有version为1才调用
process_mrcpv2_config , 只有version为2才调用
mod_unimrcp_do_config
把这些函数按我们数据库结构进行查询,然后一一对应匹配,那么就把这些内容给数据库化了。