在互联网大数据时代的背景下,作为服务器程序,高并发尤为重要,线路带宽资源就显得更加弥足珍贵了。目前比较流行语音编码有2种G711、G729。由于语音需要采用上下行对等的宽带,G711每线需要大约90kbit/s/S的带宽,而G729每线仅需要30kbit/s/S的带宽。所以采用G729编码就节约了大量带宽。
FreeSWITCH默认是不支持G729转码的,商业版本的G729效率是最高的,不过要10刀1个并发,相信很少公司会舍得采用这么高的成本去做业务。这里介绍一下freeswitch配置开源的g729进行转码的方法:
1. 准备工作:与当前运行的FreeSWITCH版本一致的源码一份, Linux 虚拟机
目前自己的系统FreeSWITCH安装目录在:/root/freeswitch/src
2. 编译g729:
先补下依赖
yum install gcc libtool autoconf automake
在进入源码../src/mod/endpoints目录下拉去源码
git clone https://github.com/typefo/mod_g729.git
进入../src/mod/endpoints/mod_g729目录,并执行编译
cd ../src/mod/endpoints/mod_g729 make
编译时如果提示找不到头文件,可以将FreeSWITCH源码include目录下的对应头文件复制到 ../mod_g729/bcg729/include/ 目录,
还有其他找不到的头文件可以使用find命令在FreeSWITCH源码目录下搜索,然后复制到../mod_g729/bcg729/include/目录,然后再重新编译
编译完成后,将mod_bcg729.so复制到FreeSWITCH的库目录 /usr/lib/freeswitch/mod/ (建议先备份原 mod_g729.so )
cp mod_g729.so /usr/lib/freeswitch/mod/
3. 修改/etc/freeswitch/vars.xml
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=G729,OPUS,G722,PCMU,PCMA,VP8"/> <X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=G729,OPUS,G722,PCMU,PCMA,VP8"/> <X-PRE-PROCESS cmd="set" data="media_mix_inbound_outbound_codecs=true"/>
4. 修改默认的2个profile 文件
/usr/local/freeswitch/conf/sip_profiles/external.xml
/usr/local/freeswitch/conf/sip_profiles/internal.xml
修改如下:
<param name="inbound-late-negotiation" value="false"/> <param name="inbound-zrtp-passthru" value="false"/> <param name="disable-transcoding" value="false"/>
注释:
inbound-late-negotiation 编码晚协商 关闭
inbound-zrtp-passthru 关闭,是否passthru 穿透模式
disable-transcoding 是否禁止转码 false是开启转码
5. 配置/etc/freeswitch/autoload_configs/modules.conf.xml 启动自动加载 mod_g729
<load module="mod_g729"/>
6. 重启FreeSWITCH
进入 fs_cli 执行
reload mod_g729 //重新加载mod_g729模块 shutdown //关闭fs
启动 FreeSWITCH
freeswitch -nonat -nc ( service freeswitch restart )
7. fs_cli 进入FreeSWITCH控制界面进行检查配置
sofia status profile internal //查看sofia internal配置 show codec //查看编码支持 ----------------------------------------------------------------- sofia profile internal restart //重新加载sofia internal配置 reload mod_g729 //重新加载mod_g729模块
参考资料:
https://developer.aliyun.com/article/766485
https://freeswitch.org/confluence/display/FREESWITCH/mod_com_g729
https://blog.51cto.com/hushengyong/2119661
https://blog.csdn.net/yuyoucuobei/article/details/50678555
注意:本文归作者所有,未经作者允许,不得转载