Исходная ОС: Ubuntu 22
АТС: Аsterisk версии 21
На момент написания этой заметки кодек g729 в бинарниках существует только для версий Аsterisk менее 18 версии. И как я понял поддержка этого кодека на версиях выше не планируется. По этому мы будем собирать сами под нашу версию.
Сам Аsterisk так же был собран из исходников и для сборки нам понадобятся эти исходники.
Первым делом обновляем ОС. Качаем исходники Аsterisk в /usr/src/asterisk-21.0.0
cd /usr/src/
git clone https://gitlab.linphone.org/BC/public/bcg729
cd bcg729
cmake .
make
make install
cd /usr/src/
git clone https://github.com/arkadijs/asterisk-g72x
cd asterisk-g72x
./autogen.sh
./configure -enable-core2 --with-asterisk-includes=/usr/src/asterisk-21.0.0/include --with-bcg729
make
make install
Кодек собран и автоматически помещен по пути /usr/lib/asterisk/modules/
Проверяем что кодек не кладет наш Аsterisk
sudo asterisk -rvvvvv
module load codec_g729.so
Подключаем кодек к Аsterisk на постоянку
Открываем на редактирование
/etc/asterisk/modules.conf
Вносим в разделы
; Codecs
load = codec_g729.so
; Formats
load = format_g729.so
sudo systemctl restart asterisk
Проверяем что кодек подгрузился и работает
sudo asterisk -rvvvvv
core show translation
Возможные ошибки:
codec_g72x.c:323:9: error: too many arguments to function ‘bcg729Decoder’
323 | bcg729Decoder(state->coder, (unsigned char *)lost_frame, 0, 1, 0, 0, dst + pvt->samples);
bcg729 - установлен старой версии, взять актуальную
codec_g72x.c:24:18: fatal error: asterisk.h: No such file or directory
24 | #include
--with-asterisk-includes=/usr/src/asterisk-21.0.0/include - подключить опцию
У меня на Raspbian результат ./autogen.sh вот такой вышел:
configure.ac:10: error: possibly undefined macro: AC_DISABLE_STATIC
If this token and others are legitimate, please use m4_pattern_allow.
See the Autoconf documentation.
configure.ac:11: error: possibly undefined macro: AM_PROG_LIBTOOL
autoreconf: error: /usr/bin/autoconf failed with exit status: 1
Скорее всего у вас не все зависимости установлены или старые версии пакетов... вариаций много. Так же надо учитывать целевую платформу под которую собираете.