Сборка (бесплатного) кодека G.729 для вашего Asterisk сервера


Компания Digium продает программные лицензии на свой кодек по 8$ за конкурентное подключение, но мы можем собрать этот кодек самостоятельно хоть это и довольно нетривиальная задача. Так же я хотел бы обратить ваше внимание, что для сборки кодека g.729 вам потребуются Intel® Integrated Performance Primitives, лицензирование IPP довольно интересная тема, но если вы не хотите ей заморачиваться, то просто загрузите IPP с сайта Intel по адресу https://software.intel.com/en-us/intel-ipp. Для загрузки IPP вам понадобится зарегистрировать учетную запись на корпоративный домен и разного рода mail.ru и yandex.ru для этого не подойдут.

Устанавливаем Intel IPP:

# tar -xvf ./l_ipp_2019.1.144.tgz 
# cd ./l_ipp_2019.1.144
# ./install.sh

Будет запущен консольный мастер установки:

Welcome
--------------------------------------------------------------------------------
Welcome to the Intel(R) Integrated Performance Primitives 2019 Update 1 for Linux*
--------------------------------------------------------------------------------

You will complete the following steps:
   1.  Welcome
   2.  License Agreement
   3.  Options
   4.  Installation
   5.  Complete

--------------------------------------------------------------------------------
Press "Enter" key to continue or "q" to quit:

По завершении работы мастера установки ipp будет установлен в каталог /opt/intel/, но помимо собственно ipp нам понадобится еще и Intel® IPP Legacy Libraries, которые необходимо загрузить по адресу https://software.intel.com/en-us/articles/intel-ipp-legacy-libraries.

# cd /tmp/
# wget http://registrationcenter-download.intel.com/akdlm/irc_nas/8006/ipp90legacy_lin_9.0.0.009.tar
# tar xvf ipp90legacy_lin_9.0.0.009.tar
# cd ./ipp90legacy_lin/
# unzip linux.zip
# mv linux /opt/intel/ipp/legacy

Пароль на архив linux.zip:

accept

И еще небольшой, но теперь уже точно финальный штрих в подготовке Intel IPP:

# cd /opt/intel/ipp/legacy/lib
# wget http://asterisk.hosting.lv/bin/icc-static-libs.tar.bz2
# tar xjf icc-static-libs.tar.bz2

После того как вы загрузили IPP приступим к сборке кодеков и первым делом установим набор пакетов которые вам понадобятся для сборки (компилятор, клиент mercurial и заголовочные файлы):

# yum install mercurial bzip2
# yum install gcc gcc-c++ make
# yum install automake autoconf

Создаем окружение для сборки:

# mkdir ./codecs
# cd ./codecs/
# hg clone http://asterisk.hosting.lv/hg asterisk-g72x
# cd ./asterisk-g72x/

Собираем кодеки:

# ./autogen.sh
# ./configure --with-asterisk14 --with-asterisk-includes=/usr/src/asterisk-14.7.7/include/
# make

Можно использовать и бинарные сборки проекта http://asterisk.hosting.lv/, но в этом случае вам надо точно знать вашу архитектуру и загрузить оптимизированный под вас кодек.

# wget http://asterisk.hosting.lv/bin/codec_g729-ast140-gcc4-glibc-x86_64-pentium4.so
# cp ./codec_g729-ast140-gcc4-glibc-x86_64-pentium4.so /usr/lib64/asterisk/modules/codec_g729.so

В случае ручной сборки вы получите оптимизированный под вас кодек (но это конечно гораздо сложнее). Для проверки того, что модуль загружается корректно, вы можете выполнить следующую команду:

pbx*CLI> module load codec_g729.so

После того как вы установили кодек и настроили его на приоритетное использование при установлении соединения, то естественно необходимо проверить используется ли он.

Получаем информацию о установленных кодеках:

pbx*CLI> core show codecs

Получаем информацию о текущих звонках:

pbx*CLI> core show channels

Подробная информация о текущем звонке:

pbx*CLI> core show channel PJSIP/147-000002c2