FreeSWITCH实现AMR/AMR-WB编解码

1、写在前面

FreeSWITCH对AMR和AMR-WB两种编码格式默认为passthough状态,若想对AMR和AMR-WB进行编解码,需对mod_amr和mod_amrwb两个模块重新编译。

本文介绍通过源码编译所需的opencore-amrov-amrwbenc两个依赖库。当然也可使用yum等工具直接安装libopencore-amrnb.solibopencore-armwb.solibvo-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-amrov-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-amrvo-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_prefsoutbound_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>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值