G.729 and G.723.1 codecs for Asterisk open source PBX

ПРЕДУПРЕЖДЕНИЕ: G.729 и G723 это платные модули

Sources

Для компиляции кодеков рекомендуется установить библиотеки Intel IPP. Поддерживаются версии Asterisk 1.4 до13(и далее) .

Binaries

  1. выберите кодек подходящий вашей версии Asterisk и вашему CPU, используйте версию x86_64 для 64-bit системы
  2. удалите старые кодеки codec_g72[39]*.so из папки /usr/lib/asterisk/modules
  3. скопируйте новые кодеки codec_g72[39]*.so в папку /usr/lib/asterisk/modules
  4. перезагрузите Asterisk
  5. проверьте наличие кодеков в системе используя команду 'core show translation recalc 10' в консоли Asterisk
  6. G.723.1 можно настроить в файле codecs.conf :
    [g723]
    ; 6.3Kbps stream, default
    sendrate=63
    ; 5.3Kbps
    ;sendrate=53
    sendrate работает только для исходящего потока. Входящий поток будет автоматически выбирать битрейт.
  7. в sip.conf и/или iax.conf настройке кодеки, это можно сделать глобально или для каждого пеера отдельно:
    disallow=all
    allow=g729
  8. используйте "g723 debug" и "g729 debug" команды для просмотра статистике и дебага
  9. для дополнительной информации о Asterisk смотрите http://asterisk-service.com/blog/asterisk-1
  10. для дополнительной информации о astconv - README




 

Notes

  • После скачивания проверьте MD5SUM.
  • Используйте x86_64 сборку для 64-bit систем. Сборки без x86_64 в имени используются для 32-bit. Используйте pentium4/core2/opteron сборки если ваш процессор 64-bit но вы используйте систему  32-bit.
  • Используйте Pentium 4 для Pentium D. Используйте Pentium 3 для VIA C3 и Pentium 4 для VIA C7.
  • XEON is a server brand CPU of Pentium3/Pentium4/Core families. Celeron is Pentium3/Pentium4/Core with smaller cache. Basically, there are 5 software cores: MMX, SSE, SSE2, SSE3, SSE4. Pick closest match from Intel CPU line and try it.
  • GCC4, ICC - all binaries are compatible with Asterisk built by any other compiler, use what is faster or better for you.
  • sse3 builds are for Prescott iteration of Pentium 4 chips with SSE3 support, check for PNI flag in /proc/cpuinfo.
  • ICC cores are not always the fastest, check with '(core) show translation recalc 10' on Asterisk console, ensure the box is idle or else timings will be inaccurate.

Troubleshooting

  • Шум или металлические звук с кодеком codec_g723
    Настройте /etc/asterisk/codecs.conf [g723] sendrate=63 or 53.
  • Искаженный звук/голос
    Выключите VAD и CNG на телефоне.
  • show translation - нету кодека 723/729 
    Установите asterisk verbosity level более 3 -vvv и посмотрите на ошибки после выполнения 'loading module codec_g729...'
  • loader.c... /usr/lib/asterisk/modules/codec_g72...: cannot restore segment prot after reloc: Permission denied
    Выполните:
    $ chcon -t textrel_shlib_t /usr/lib/asterisk/modules/codec_g72[39]*.so
    Это происходит когда SELinux включен.
  • loader.c... /usr/lib/asterisk/modules/codec_g72...: cannot enable executable stack as shared object requires: Permission denied
    Выполните:
    $ execstack -c /usr/lib/asterisk/modules/codec_g72[39]*.so
  • Error loading module codec_g72...: cannot open shared object file: No such file or directory
    Проверьте
    $ ldd codec_g729.so
    $ strace -o trace.log -efile -f asterisk
    send ldd output and trace.log file to Asterisk G.729 Google group.
  • Error loading module codec_g72...: wrong ELF class: ELFCLASS32
    Используйте x86_64 кодеки потому что ваша система на 64-bit.
  • $ ldd codec_g729.so: not a dynamic executable
    Bcgjkmpeqnt 32-bit
  • Asterisk падает на старте
    Если Pentium4 кодек не работает, попробуйте -no-sse сборку, или Pentium3.
  • Asterisk still crashing at startup
    Compile asterisk with CFLAGS=-g
    Run asterisk in gdb (with original and -debug version of the codec):
    $ gdb /usr/sbin/asterisk
    (gdb) r -cvvv
    when it crashes do:
    (gdb) set disassembly-flavor intel
    (32-bit gdb 6.x) disassemble $eip $eip+20
    (32-bit gdb 7.x) disassemble $eip, $eip+20
    (64-bit gdb 6.x) disassemble $rip $rip+20
    (64-bit gdb 7.x) disassemble $rip, $rip+20
    (gdb) info registers
    (gdb) info threads
    (gdb) bt
    (gdb) l
    (gdb) q
    Send an output to Asterisk G.729 Google group together with the result of 'cat /proc/cpuinfo'.
  • Why these Illegal instruction errors?
    For in-depth technical information read http://gcc.gnu.org/PR32893 and http://bugs.gentoo.org/show_bug.cgi?id=151394.

Asterisk 1.8

Asterisk 11

Asterisk 12

Asterisk 13

Asterisk 14

Asterisk 15