Кодеки - установка и сборка под Asterisk

Администратор,

Кодеки используется для преобразования речевого сигнала аналог в цифровой или закодированный. Кодеки изменяются в качестве, ширине полосы канала , и в вычислительных требованиях, и т.п..

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

К примеру телефоны Cisco используют G.723.1, G.711a, G.711u, G.729a и ……

Не все кодеки можно получить бесплатно, к примеру Asterisk G.729 - платный и используется он довольно часто.

Кодеки и ширина полосы (канала)

Кодек     BR       NEB
G.711     64 Kbps  87.2 Kbps          самый жирный кодек
G.729     8  Kbps  31.2 Kbps          идеальное сочетание между качеством и каналом
G.723.1   6.4 Kbps 21.9 Kbps          среднее качество (free-codec)
G.723.1   5.3 Kbps 20.8 Kbps          среднее качество (free-codec)
G.726     32  Kbps 55.2 Kbps          среднее качество (free-codec)
G.726     24  Kbps 47.2 Kbps          среднее качество (free-codec)
G.728     16  Kbps 31.5 Kbps
LBC       15  Kbps 27.7 Kbps
 BR = Bit rate  NEB = Nominal Ethernet Bandwidth (в одном направление)

Установка кодеков

И так для установки кодеков, нам нужно выбрать, какой нам кодек нужен (или все) и узнать на каком железе мы его будем ставить (Hardware) .Перед тем как скачать кодеки с http://asteriskworld.ru/downloads внимательно посмотрите на их названия.

Пример codec_g729-ast14-gcc4-glibc-pentium4.so. Здесь Кодек G.729 для Asterisk 1.4.X на базе Pentium 4. После того как скатали кодек, копируем его в папку /usr/lib/asterisk/modules. Проверяем если в /etc/asterisk/modules.conf есть строчка : autoload=yes.
Далее в CLI

module load codec-… .(название) .. . .so

  == Registered translator 'g729tolin' from format g729 to slin, cost 3
  == Registered translator 'lintog729' from format slin to g729, cost 13

Loaded codec_g729-ast14-gcc4-glibc-pentium3-no-sse.so => (G.729 Coder/Decoder)
Далее смотрим какие кодеки у нас работают в системе

voip3*CLI> core show translation
         Translation times between formats (in milliseconds) for one second of data
          Source Format (Rows) Destination Format (Columns)

        voip3*CLI> core show translation
         Translation times between formats (in milliseconds) for one second of data
          Source Format (Rows) Destination Format (Columns)

          g723 gsm ulaw alaw g726aal2 adpcm slin lpc10 g729 speex ilbc g726 g722
     g723    -   4    2    2        3     2    1     4   14     -   20    3    -
      gsm   15   -    2    2        3     2    1     4   14     -   20    3    -
     ulaw   15   4    -    1        3     2    1     4   14     -   20    3    -
     alaw   15   4    1    -        3     2    1     4   14     -   20    3    -
 g726aal2   16   5    3    3        -     3    2     5   15     -   21    1    -
    adpcm   15   4    2    2        3     -    1     4   14     -   20    3    -
     slin   14   3    1    1        2     1    -     3   13     -   19    2    -
    lpc10   24  13   11   11       12    11   10     -   23     -   29   12    -
     g729   17   6    4    4        5     4    3     6    -     -   22    5    -
    speex    -   -    -    -        -     -    -     -    -     -    -    -    -
     ilbc   17   6    4    4        5     4    3     6   16     -    -    5    -
     g726   16   5    3    3        1     3    2     5   15     -   21    -    -
     g722    -   -    -    -        -     -    -     -    -     -    -    -    -

И так в табличке там где

(линия) кодек не установлен
(цифра) означает сколько миллисекунд нужно для преобразования из кодека А в B
После такого сообщения можно смело добавить в sip.conf
Allow=g729 (в моем случае)
Или любой кодек который вы добавили

Сборка кодеков
Не всегда можно наити кодек которыи подойдет для вашего железа и тогда надо собирать самостоятельно свои кодек под свою машинку.Для сборки кодеков необходимо на готовой машине (с Asterisk) настроить и собрать.

Для того чтоб собрать кодек надо
Скачать sample-speech-coding , IPP base и patch (все можно наити в разделе Downloads)
Кроме того вам понадобится Лицензия от Intel которая выдается при скачивание любого [NonComercial] продукта с их сайта.
к примеру можно скатать C++ Compiler тут вы пройдете Регистрацию и получите ключ и Лицензию (на мыло)

Внимание если лицензия не подойдет к продукту IPP base то придется поставить сначало C++ Compiler с Лицензией потом удалить его и после этои процедуры при установки IPP base лицензию не потребуют.Новый C++ Compiler и кодеки (версии 5 и выше не работают)и не пытайтесь собрать их я потратил сутки и ниче не получилось.

Копируем все в /usr/src/tmp/ (к примеру)

mkdir /usr/src/tmp
cd /usr/src/tmp
tar -xf /usr/src/tmp/l_ipp_ia32_itanium_p_4_1_2.tar
cd /usr/src/tmp/l_ipp_ia32_itanium_p_4_1_2
./install.sh
тут Внимательно читаем все что написано, и в конце указываем путь к Лицензий (если не был ранее установлен C++ Compiler)

Далее ставим sample-speech-coding

tar -zxvf /usr/src/tmp/l_ipp_ia32_itanium_p_4_1_2
cd /usr/src/tmp/ipp-samples
теперь надо использовать patch для сборки кодека G729 и G723

cd /usr/src/mtp/ipp-samples
patch -p0 < /usr/src/tmp/ipp-svn8.diff
И так если все прошло удачно то можно смело приступить к конфигурации самих кодеков.Файл конфигурации находится в

cd /usr/src/tmp/ipp-samples/speech-coding/
vi makeopts

# System Specific
INCLSFX=.h
CPPSFX=.c
OBJSFX=.o
EXESFX=

# Optional, for ICC
#ICCLIBS=-lsvml

# IPP Dependencies
#IPPINCLS=-I$(IPPROOT)/include
#IPPLIBS=-L$(IPPROOT)/sharedlib -lippsc -lipps -lippcore -L$(IPPROOT)/sharedlib/linux32 -lguide

# Comment the above two and uncomment these
# three lines to build statically linked version
IPPINCLS=-I$(IPPROOT)/include -include $(IPPROOT)/tools/staticlib/ipp_$(IPPCORE).h
IPPLIBS=-L$(IPPROOT)/lib -lippscmerged -lippsrmerged -lippsmerged -lippcore
LDFLAGS=-static
# -libcxa

# Optimizations, choose one set only depending on CPU type (or debug at bottom)
#OPTIMIZE= -O2
#IPPCORE=

# For Pentium I
#OPTIMIZE= -O6 -march=pentium  -mtune=pentium -ffast-math -fomit-frame-pointer
#IPPCORE=px

# For PII
#OPTIMIZE=-O6 -march=pentium2 -mtune=pentium2 -ffast-math -fomit-frame-pointer
#IPPCORE=px

# For PIII
OPTIMIZE= -O6 -mtune=pentium3 -march=pentium3 -ffast-math -fomit-frame-pointer
IPPCORE=a6

# For PIII no SSE
#OPTIMIZE= -O6 -mtune=pentium3 -march=pentium3 -ffast-math -fomit-frame-pointer -mno-sse
#IPPCORE=a6

# For P4
#OPTIMIZE= -O6 -march=pentium4 -mtune=pentium4 -ffast-math -fomit-frame-pointer
#IPPCORE=w7
# optional

# For P4 no SSE
#OPTIMIZE= -O6 -march=pentium4 -mtune=pentium4 -ffast-math -fomit-frame-pointer -no-sse
#IPPCORE=w7

# For Athlon (untested)
#OPTIMIZE= -O6 -march=athlon   -mtune=athlon -ffast-math -fomit-frame-pointer
#IPPCORE=a6

# For debugging
#OPTIMIZE= -O -g
#IPPCORE=px


по умолчанию файл настроен оптимально для вашеи системы но при желании каждыи может его переделать под себя и под свои процессор.

После этого осталось лиш запустить сому сборку

cd /usr/src/ipp_sample/speech-coding
chmod 755 runme.sh
./runme.sh
елси все прошло удачно то в /usr/src/ipp_sample/speech-coding появится новые кодеки codec_g729.so и codec_g723.so теперь все делаем как описано сверху.