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.- asterisk-g72x-1.1-beta4.tar.bz2 - supports Asterisk 10.0, supports IPP 7.0
- README
- hg clone http://bitbucket.org/arkadi/asterisk-g72x
- hg clone http://asterisk.hosting.lv/hg asterisk-g72x
Binaries
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

