语音编码不兼容会导致语音不通的问题。在最近几年,特别是移动网络的发展,很多新的语音编码已经支持了生产环境。如果软交换不支持的话其编码的话,就会导致语音不同,呼叫失败的问题。其中,AMR-WB是目前移动网络中非常常用的语音编码,它已经被3GPP认定为强制使用的GSM,WCDMA网络强制使用的编码。
通常情况下,我们所说的AMR是表示的AMR-NB,还有另外一种是AMR-WB(3GPP)/G.722.2(ITU), 此编码被广泛应用在媒体服务器,VoIP领域,移动互联网通信(GSM,WCDMA),网络对接等环境中,它和AMR相比,它同时支持了VAD/DTX和CNG功能。因此,AMR-WB获得了更广泛的使用。除了以上功能以外,当然,AMR-WB相比AMR-NB在语音质量方面和QoS获得了不错的测试结果:
其应用场景包括:
- Wideband telephony on converged wireless, wireline and Wi-Fi networks, VoIP, satellite telephony, Push to talk over Cellular, video telephony
- Conferencing
- Streaming audio over the Internet
- True-tones, ringtones
- Audio storage and playback
- Voicemail
- Media players
- Media servers
- Media gateways
- Content creation tools
- Store and forward messaging
在默认的Asterisk平台中,AMR编码没有打包在官方的发布版本中,为了获得AMR-WB的支持,用户需要通过打补丁的方式对AMR-WB编码模块重新编译,然后获得其功能支持,通过补丁文件可以实现其他编码和AMR-WB的转码功能。现在,我们介绍一下如何通过简单补丁程序编译AMR-WB让Asterisk很多AMR-WB的支持。
首先,需要安装补丁文件,这里要求Asterisk版本至少是13.7或以上版本:
cd /usr/src/
wget downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
tar zxf ./asterisk*
cd ./asterisk*
sudo apt --no-install-recommends --assume-yes install autoconf automake build-essential pkg-config libedit-dev libjansson-dev libsqlite3-dev uuid-dev libxslt1-dev xmlstarlet
然后安装支持包,如果不实现转码功能(pass-through t透传,涉及了许可证问题),可忽略此步骤。用户需要安装OpenCORE AMR,这里是Ubutun/Debian环境命令:
sudo apt --assume-yes install libopencore-amrnb-dev libopencore-amrwb-dev libvo-amrwbenc-dev
接下来,执行补丁处理,添加AMR-WB代码:
wget github.com/traud/asterisk-amr/archive/master.zip
unzip -qq master.zip
rm master.zip
cp --verbose --recursive ./asterisk-amr*/* ./
patch -p0 <./codec_amr.patch
patch -p0 <./build_tools.patch
然后回到Asterisk源代码路径下,执行以下命令,重新配置Asterisk编译环境:
./bootstrap.sh
./configure
然后修改编译菜单支持功能,支持slin16。
make menuselect.makeopts
./menuselect/menuselect --enable-category MENUSELECT_CORE_SOUNDS
最后,执行编译安装:
make
sudo make install
用户可以使用支持AMR-WB的软电话互相呼叫来进行测试,开发人员推荐了以下几种软电话,用户可以下载测试。
A. (Google Android) CSipSimpleB. (Google Android) CounterPath BriaC. (Apple iOS) CounterPath BriaD. (Windows Phone 8) Linphone
以上配置说明是关于AMR-WB的安装配置方式,AMR-NB的支持也可以通过开发人员的补丁来实现支持。具体的安装配置方式读者可以通过参考链接获得。
关于AMR-WB的测试和Codec for Enhanced Voice Services (EVS),3GPP官方有很多相关的技术资料和测试方法(编码,带宽,语言类型,VAD,DTX,JBM,传输速率,帧格式)结果。用户可以参照学习。
以上,笔者为读者提供了根据AMR-WB的补丁文件如何实现Asterisk环境下AMR-WB的支持。另外,笔者简单介绍了关于AMR-NB和AMR-WB的一些基本知识,和其相关的一些测试报告。通过以上安装配置文档,读者基本上可以掌握其补丁的使用方式。
参考资料:
https://github.com/traud/asterisk-amr
https://tools.ietf.org/html/rfc4867#section-3
https://www.etsi.org/deliver/etsi_tr/126900_126999/126901/04.00.01_60/tr_126901v040001p.pdf
http://www.cs.tut.fi/kurssit/TLT-6506/2006/S2.pdf
https://www.eurasip.org/Proceedings/Eusipco/Eusipco2010/Contents/papers/1569291575.pdf
https://www.etsi.org/deliver/etsi_tr/126900_126999/126952/12.00.00_60/tr_126952v120000p.pdf