1、写在前面
FreeSWITCH对AMR和AMR-WB两种编码格式默认为passthough状态,若想对AMR和AMR-WB进行编解码,需对mod_amr和mod_amrwb两个模块重新编译。
本文介绍通过源码编译所需的opencore-amr
和ov-amrwbenc
两个依赖库。当然也可使用yum
等工具直接安装libopencore-amrnb.so
、libopencore-armwb.so
、libvo-amrwbenc.so
.
本文内涉及的所有路径,均可根据实际情况进行更改,不局限于root用户。
2、编译OpenCore AMR源码
下载OpenCore AMR源码,点击这里跳转,推荐使用版本为0.1.3。如下图:
解压压缩包并进入源码根目录进行安装:
tar xzf opencore-amr-0.1.3.tar.gz
cd opencore-amr-0.1.3/
./configure --prefix=/root/libs
make && make install
增加AMR-WB支持
若只需AMR编码格式,可直接跳过此步骤。
OpenCore AMR源码压缩包包含了AMR-NB编码和解码,但是AMR-WB只支持编码,所以我们需要增加AMR-WB解码能力。
下载vo-amrwbenc压缩包,点击这里跳转,推荐版本为0.1.3,如下图:
解压压缩包并进入源码根目录进行安装:
tar xzf vo-amrwbenc-0.1.3.tar.gz
cd vo-amrwbenc-0.1.3/
./configure --prefix=/root/libs
make && make install
至此,依赖库编译完成,opencore-amr
和ov-amrwbenc
均安装在了/root/libs
文件夹下,目录树如下:
.
├── include
│ ├── opencore-amrnb
│ │ ├── interf_dec.h
│ │ └── interf_enc.h
│ ├── opencore-amrwb
│ │ ├── dec_if.h
│ │ └── if_rom.h
│ └── vo-amrwbenc
│ └── enc_if.h
└── lib
├── libopencore-amrnb.a
├── libopencore-amrnb.la
├── libopencore-amrnb.so -> libopencore-amrnb.so.0.0.3
├── libopencore-amrnb.so.0 -> libopencore-amrnb.so.0.0.3
├── libopencore-amrnb.so.0.0.3
├── libopencore-amrwb.a
├── libopencore-amrwb.la
├── libopencore-amrwb.so -> libopencore-amrwb.so.0.0.3
├── libopencore-amrwb.so.0 -> libopencore-amrwb.so.0.0.3
├── libopencore-amrwb.so.0.0.3
├── libvo-amrwbenc.a
├── libvo-amrwbenc.la
├── libvo-amrwbenc.so -> libvo-amrwbenc.so.0.0.4
├── libvo-amrwbenc.so.0 -> libvo-amrwbenc.so.0.0.4
├── libvo-amrwbenc.so.0.0.4
└── pkgconfig
├── opencore-amrnb.pc
├── opencore-amrwb.pc
└── vo-amrwbenc.pc
添加环境变量
由于opencore-amr
和vo-amrwbenc
安装路径为我们自定义路径(推荐将两个库安装再同一路径,路径配置在configure时通过–prefix指定,本次安装均为/root/libs
),需配置环境变量告知FreeSWITCH依赖库位置。
vim ~/.bash_profile
新增下面一行:
export PKG_CONFIG_PATH=/root/libs/lib/pkgconfig:$PKG_CONFIG_PATH
保存退出
source ~/.bash_profile
编译mod_amr
至此,依赖库已经安装完成,可开始进行mod_amr模块的编译。
进入FreeSWITCH源码目录,本次安装过程中为/root/freeswitch-1.8.5
cd /root/freeswitch-1.8.5
重新生成mod_amr模块的Makefile文件
./bootstrap.sh -j
./configure --prefix=/root/freeswitch-bin
cd src/mod/codecs/mod_amr
make
make install
至此mod_amr编译完成,fs_cli进入FreeSWITCH前台,加载mod_amr模块,即可。
编译mod_amrwb
进入FreeSWITCH源码目录,本次安装过程中为/root/freeswitch-1.8.5
cd /root/freeswitch-1.8.5
重新生成mod_amrwb模块的Makefile文件
./bootstrap.sh -j
./configure --prefix=/root/freeswitch-bin
cd src/mod/codecs/mod_amrwb
make
make install
至此mod_amrwb编译完成,fs_cli进入FreeSWITCH前台,加载mod_amrwb模块,即可。
配置路由
新增编码格式
由于FreeSWITCH默认编码格式内没有AMR/AMR-WB两个,需要修改vars.xml内global_codec_prefs
和outbound_codec_prefs
两个配置项,用于新增编码格式。如下所示:
<X-PRE-PROCESS cmd="set" data="global_codec_prefs=OPUS,PCMU,PCMA,H264,AMR,AMR-WB"/>
<X-PRE-PROCESS cmd="set" data="outbound_codec_prefs=OPUS,PCMU,PCMA,H264,AMR,AMR-WB"/>
呼叫路由
AMR/AMR-WB转PCMA/PCMU
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="bridge" data="{absolute_codec_string='PCMA\,PCMU'}user/$1"/>
</condition>
</extension>
PCMA/PCMU转AMR/AMR-WB
<extension name="Local_Extension">
<condition field="destination_number" expression="^(10[01][0-9])$">
<action application="bridge" data="{absolute_codec_string='AMR\,AMR-WB'}user/$1"/>
</condition>
</extension>