Все течет все меняется… 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 и наслаждаемся
З.Ы. Не забудьте удалить собранное, ибо оно платное:)