Asterisk10+g729

Все течет все меняется… 25 лет, почти пол жизни прожито, наконец-то военкомат от меня отстал. Сижу на работе, рядом гудят сервера, АТСки, работает кондиционер — красота, и захотелось чегото возвышенного. Соберука я g729 на FreeBSD 8.3 для Asterisk 10.5.1. Для начала нам понадобиться быстрый сервачок, благо в соседнем отделе есть человек который выбрал мне лучшую память и лучшие ядра из блейда:)
Сразу предупреждаю, я делаю это лишь just4fun, кодек платный и Вы как честный человек должны за него платить:)))
Кому инетресно прошу

1. Можно скачать уже готовый бинарник аккуартненько положить в модули астера и забить, если же для Вашей платформы нет готовой бинари то

2. Можно собрать из сорцов(чем мы и займемся) и поставить
И первое и второе берем с http://asterisk.hosting.lv/
Скачиваем и распаковываем сорцы

mkdir g729
cd g729
fetch http://asterisk.hosting.lv/src/asterisk-g72x-1.1.tar.bz2
tar -xvf asterisk-g72x-1.1.tar.bz2

Появиться папочка asterisk-g72x-1.1
Все на этом подготовка окончена:)

3. Вдумчиво читаем http://asterisk.hosting.lv/src/README.txt

To compile the codecs it is recommended to install Intel IPP libraries for
production-level performance.

Для того чтобы у нас все было быстро и хорошо нужно установить Intel IPP библиотеки.

4. Идем http://software.intel.com/en-us/articles/non-commercial-software-download/ находим
Intel® Integrated Performance Primitives (Intel® IPP) for Linux
Жмакаем отвечаем на вопросы, после этого на почту приходит ссылочка на скачивание
У меня это было
http://registrationcenter-download.intel.com/akdlm/irc_nas/2855/l_ipp_7.1.1.117_ia32.tgz
http://registrationcenter-download.intel.com/akdlm/irc_nas/2581/l_ipp_7.0.7.319_ia32.tgz
http://registrationcenter-download.intel.com/akdlm/irc_nas/1911/l_ipp_ia32_p_6.1.6.063.tar.gz
Какую версию выбрать: в моем случае для большинства(я думаю вам не Ivy Bridge свеженький выдали) тазов подходит 6ка!

5. Распаковываем

cd 
mkdir ipp
cd ipp
fetch http://registrationcenter-download.intel.com/akdlm/irc_nas/1911/l_ipp_ia32_p_6.1.6.063.tar.gz
tar -xvf l_ipp_ia32_p_6.1.6.063.tar.gz

6. В папке rpm(см. п.7) будут лежать файлики их все нужно тоже распаковать, но как? нам на выручку приходит archivers/rpm2cpio этот милый порт

cd /usr/ports/archivers/rpm2cpio
make install clean
rehash

7. Заходим и распаковываем(создаст папку opt в текущей директории-обратите внимание чтобы были права на запись)

%cd l_ipp_ia32_p_6.1.6.063
%cd rpms  или cd rpm(зависит от версии)
%ls
 intel-ippia32063-6.1p-063.i486.rpm 
 intel-ippia32lib063-6.1p-063.i486.rpm
 intel-ippia32libdev063-6.1p-063.i486.rpm
 ippEULA.txt
%rpm2cpio.pl intel-ippia32063-6.1p-063.i486.rpm | cpio --extract --make-directories
%rpm2cpio.pl intel-ippia32lib063-6.1p-063.i486.rpm | cpio --extract --make-directories
%rpm2cpio.pl intel-ippia32libdev063-6.1p-063.i486.rpm | cpio --extract --make-directories

Если все сделали правильно в папке rpm появиться папка opt, а в ней…
/usr/home/user/ipp/l_ipp_ia32_p_6.1.6.063/rpm/opt/intel/ipp/6.1.6.063/ia32
Это путь к ipp, нам нужно будет его записать!

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

9. Переходим в папку с сорцами у меня это /usr/home/user/asterisk-g72x-1.1
Изучаем конфигурационный файл и собираем че нам нужно(у меня дома например *10 и CeleronD)
Можно конечно было бы и без IPP, но как нам говорит Readme сорцов, для опции —with-itu которая будет использовать нативные ANSI C либы, нам понадобиться сразу таз класса core2!!

Still, even with ICC, it is 10x slower than IPP — 30ms vs 3ms of processor time to encode one second of G.729 audio on modern hardware.
GCC with LTO is 2x slower than ICC.
With ITU-T code, Core2 class processor is recommended.

%./configure --help
%./configure --with-ipp=/usr/home/user/ipp/l_ipp_ia32_p_6.1.6.063/rpm/opt/intel/ipp/6.1.6.063/ia32 --with-asterisk100 --enable-pentium4
%gmake

10. Если все собралось без ошибок то…

cd ./.libs
cp codec_g729.so /usr/local/lib/asterisk/modules/

11. Подгружаем модуль в Астериске

>module load codec_g729.so 
Loaded codec_g729.so
  == Registered translator 'g729tolin' from format g729 to slin, table cost, 900000, computational cost 1897
  == Registered translator 'lintog729' from format slin to g729, table cost, 600000, computational cost 7744
 Loaded codec_g729.so => (g729 Coder/Decoder, based on Intel IPP)

12. Проверяем…. Правим sip.conf и наслаждаемся

З.Ы. Не забудьте удалить собранное, ибо оно платное:)

Комментарии: