Просим прощения, но информация доступна только на английском языке

G.729 and G.723.1 codecs x86 (and x86_64) Linux and FreeBSD binaries for Asterisk open source PBX

DISCLAIMER: You might have to pay royalty fees to the G.729/723.1 patent holders for using their algorithm.

Sources

To compile the codecs it is recommended to install Intel IPP libraries for production-level performance. Asterisk 1.4, 1.6, 1.8, 10.0 and TRUNK are supported. Support for Asterisk 1.2 and Callweaver may appear eventually, for now use the pre-built binaries. Use "g723 debug" and "g729 debug" commands to print statistics about received frame sizes, can aid in debugging audio problems. You need to bump Asterisk verbosity level to 3 to see the numbers.

Binaries

  1. choose codec binary appropriate for your Asterisk version and CPU type, use x86_64 for 64-bit mode
  2. delete old codec_g729/723*.so files (if any) from /usr/lib/asterisk/modules directory
  3. copy new codec_g729/723*.so files into /usr/lib/asterisk/modules directory
  4. restart Asterisk
  5. check the codec is loaded with 'core show translation recalc 10' on Asterisk console
  6. G.723.1 send rate is configured in Asterisk codecs.conf file:
    [g723]
    ; 6.3Kbps stream, default
    sendrate=63
    ; 5.3Kbps
    ;sendrate=53
    This option is for outgoing voice stream only. It does not affect incoming stream that should be decoded automatically whatever the bitrate is.
  7. in sip.conf or/and iax.conf configure the codec(s) either globally or under respective peer, for example:
    disallow=all
    allow=g729
  8. for detailed information about Asterisk configuration visit voip-info.org
  9. for information about astconv utility read the README
  10. in case of problems read Notes and Troubleshooting
Asterisk 1.2

Asterisk 1.4

Asterisk 1.6.0

Asterisk 1.6.1

Asterisk 1.6.2

Asterisk 1.8

Asterisk 10.0

Asterisk SVN TRUNK r330379

Callweaver 1.2

Asterisk 1.2 uClibc (AstLinux 0.4)

Asterisk 1.4 uClibc (AstLinux 0.6)

Command line encoder and decoder

FreeBSD 5.3 Asterisk 1.0/1.2

FreeBSD 6.x Asterisk 1.2 by Zeta

FreeBSD 6.x Asterisk 1.4

FreeBSD 7.x Asterisk 1.2 by Sergio Lenzi

FreeBSD 7.x Asterisk 1.4

FreeBSD 8.x Asterisk 1.6.0 by Eugene M. Zheganin

FreeBSD 8.1 Asterisk 1.6.2 by Alexander Brovikov

FreeBSD 8.1 Asterisk 1.6.2 amd64 by Maxim Morgunov

FreeBSD 8.2 Asterisk 1.8.2

FreeBSD 8.1 Asterisk 1.8.3 amd64

OpenBSD 4.8 Asterisk 1.6.2 by Raphael Mazelier

OpenBSD 4.9 Asterisk 1.8

OpenBSD 4.9 Asterisk 1.8 amd64 by Stas Titov

Notes

  • After download check MD5SUM.
  • Use x86_64 build if running 64-bit mode. Binary without x86_64 in its name is 32-bit. Use pentium4/core2/opteron binaries even your processor is 64-bit capable but you are running 32-bit.
  • Use Pentium 4 build for Pentium D. Use Pentium 3 for VIA C3 and Pentium 4 for VIA C7. XEON is server type of Pentium3/Pentium4/Core2. Celeron is Pentium3/Pentium4/Core2 with smaller cache. Basically, there are 4 software cores: MMX, SSE, SSE2, SSE3. Pick closest match from Intel CPU line and try it.
  • GCC, GCC4 or ICC - all binaries are compatible with Asterisk built by any other compiler, use what is faster or better for you.
  • sse3 builds are only for newer P4 chips (Prescott) 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.
  • Non-x86 architecture CPU-s are not supported. IPP is available for Itanium but I don't have the hardware. There is also IPP for ARM, but I don't have ARM hardware too. Also, ARM vary a lot, most of ARM-s are too slow to be practical for G.729 and G.723.1, and various things including floating point must be sorted out before ARM binaries became possible.

Troubleshooting

  • Noise or metalic sound with codec_g723

    Configure /etc/asterisk/codecs.conf [g723] sendrate=63 or 53 as described at the top of this page.
  • Distorted sound

    Disable VAD and CNG in phone and/or your VOIP provider.
  • show translation - codec is not loaded

    Bump asterisk verbosity level with -vv and watch for messages right after 'loading module codec_g729...'
  • Module codec_g72... does not provide a description

    Choose proper version of the codec to match your Asterisk version. TRUNK is for SVN TRUNK - the next yet unrealeased major version of Asterisk.
  • Module codec_g72... was not compiled with the same compile-time options as this version of Asterisk.

    Try new 1.4 and/or TRUNK builds.
  • loader.c... __load_resource: /usr/lib/asterisk/modules/codec_g72...: cannot restore segment prot after reloc: Permission denied

    Execute:

    $ chcon -t textrel_shlib_t /usr/lib/asterisk/modules/codec_g72[39]*.so

    This happens when SELinux is enabled and Asterisk process cannot load the codec because of ELF TEXTREL in shared library. This is how IPP works and that is fine.
  • Error loading module codec_g72...: cannot open shared object file: No such file or directory

    Check

    $ 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

    Use x86_64 binaries because you're running 64-bit OS.
  • $ ldd codec_g729.so: not a dynamic executable

    You are running 32-bit, see Notes - note #2
  • Asterisk crashing at startup

    If Pentium4 codec is not working, try -no-sse builds, try Pentium3. Try ICC builds. Doesn't work - try Pentium and Debug builds.
  • 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.

Getting help

The primary source of help is Asterisk G.729 Google group. Post your questions there, but first read Notes and Troubleshooting sections above. When reporting a problem it is up to you to provide as much usefull information as possible. "Doesn't work" - is not a good description.

Just a promo link for a friendly site RM Birojs

Another link for SIA Tvids