在互联网大数据时代的背景下,作为服务器程序,高并发尤为重要,线路带宽资源就显得更加弥足珍贵了。目前比较流行语音编码有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://blog.csdn.net/HanJiezZ/article/details/90237431?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-1

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






注意:本文归作者所有,未经作者允许,不得转载