Asterisk какие кодеки установлены
Обновлено: 06.07.2024
Кодеки используется для преобразования речевого сигнала аналог в цифровой или закодированный. Кодеки изменяются в качестве, ширине полосы канала , и в вычислительных требованиях, и т.п..
Каждая услуга, программа, телефон, шлюз, и т.п. обычно поддерживает несколько кодеков, и перед разговором они договариваются, какой кодек использовать
К примеру телефоны Cisco используют G.723.1, G.711a, G.711u, G.729a и ……
Не все кодеки можно получить бесплатно, к примеру Asterisk G.729 - платный и используется он довольно часто.
G.729 8 Kbps 31.2 Kbps идеальное сочетание между качеством и каналом
BR = Bit rate NEB = Nominal Ethernet Bandwidth (в одном направление)
Пример 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.
== 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)
Далее смотрим какие кодеки у нас работают в системе
Translation times between formats (in milliseconds) for one second of data
(цифра) означает сколько миллисекунд нужно для преобразования из кодека А в B
Не всегда можно наити кодек которыи подойдет для вашего железа и тогда надо собирать самостоятельно свои кодек под свою машинку.Для сборки кодеков необходимо на готовой машине (с Asterisk) настроить и собрать.
Кроме того вам понадобится Лицензия от Intel которая выдается при скачивание любого [NonComercial] продукта с их сайта.
к примеру можно скатать C++ Compiler тут вы пройдете Регистрацию и получите ключ и Лицензию (на мыло)
Внимание если лицензия не подойдет к продукту IPP base то придется поставить сначало C++ Compiler с Лицензией потом удалить его и после этои процедуры при установки IPP base лицензию не потребуют.Новый C++ Compiler и кодеки (версии 5 и выше не работают)и не пытайтесь собрать их я потратил сутки и ниче не получилось.
тут Внимательно читаем все что написано, и в конце указываем путь к Лицензий (если не был ранее установлен C++ Compiler)
теперь надо использовать patch для сборки кодека G729 и G723
И так если все прошло удачно то можно смело приступить к конфигурации самих кодеков.Файл конфигурации находится в
Asterisk IP PBX - это ПО, распространяемое по открытой лицензии, что делает невозможным включение в состав дистрибутива некоторых коммерческих технологий, таких как патентованные алгоритмы эхо-компенсации и преобразования кодеков G.729 и G.723.1. Однако, компания Digium предоставляет возможность всем желающим приобрести лицензию на использование кодека G729, которая позволяет использовать этот кодек для преобразования голосовых каналов (транскодирования).
Сервер Asterisk поддерживает работу с кодеками:
Гибридные кодеки G.729, G.729 Annex А, G.729 Annex B (содержит VAD и генератор комфортного шума): Использование кодека Гибридные кодеки G.729 в продуктах требует лицензирования от: Sipro Lab Telecom или VoiceAge, если вы живете в США или некоторых других странах. Существует некоторое количество свободных некоммерческих экспериментальных реализаций кодека G.729: бинарные и др. Сервер Asterisk поддерживает работу кодека в режиме pass-thru (т.е. без транскодинга) или, если у Вас имеется лицензия? или у Вас есть голова и руки. G.723.1: Использование этого кодека в продуктах требует лицензии от Sipro Lab Telecom. Сервер Asterisk поддерживает работу с этим кодеком в режиме pass-thru. G.726: 32kbps в версии Asterisk 1.0.3, 16/24/32/40kbps в CVS HEAD версиях. Если G.711 использует полосу в 64 Kbps, то G.726 использует 32 Kbps, обеспечивая примерно такое же качество связи. Он, также, используется как стандартный кодек в системах с беспроводными DECT телефонами. iLBC: это VoIP кодек, разработанный Global IP Sound, и сделанный общедоступным (включая исходные коды) под свободной и довольно либеральной лицензией, которая включает в себя возможность модификации кода. Speex: это голосовой кодек с открытым исходным кодом. Битрейт конфигурация: 4-48kbps, VBR, ABR, и т.д. Для использования в командах ограничения использования кодеков allow и disallow, ниже приведена таблица соответствия используемых аббревиатур и названий кодеков:Типичный пример использования ограничения на кодеки:
Разные клиенты поддерживают различные интервалы разбивки аудиоданных на порции цифровых данных, передаваемых в дальнейшем по сети. Сервер Asterisk поддерживает только разбивку через каждые 20ms в протоколах, использующих RTP для передачи аудиоданных, типа SIP или MGCP, из этого следует, что Вам необходимо настроить Ваше клиентское оборудование в соответствии с этим требованием.
Бинарные файлы кодеков можно скачать отсюда asterisk.hosting.lv или G.729 и G.723.1 кодеки.
Скачиваем кодеки под нужную ОС (Ubuntu 9.10 Server 64-bit) и версию Asterisk (1.6.2).
Удаляем старые кодеки codec_g729/723*.so в директории /usr/lib/asterisk/modules . Копируем в туже директорию новые кодеки.
Совершенно не лишним будет разобрать как же все-таки добавить необходимые кодеки в систему где развернута АТС на базе Asterisk. Может конечно данная заметка и не претендует на новизну, но все же она носит практический характер для меня лично, своего рода шпаргалка.
А потому можно и разобрать уже опубликованные заметки присутствующие во всемирной паутине но с акцентом на свое видение.
Asterisk развернут по заметке опубликованной на моем блоге:
$ uname -a && lsb_release -a && asterisk -V
14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
На сколько я вычитал, к одек G.729 позволяет вести много большее количество разговоров при ограниченном канале, что сразу же поднимает его эффективность. В обычном использовании VOIP телефонии используется 64Кбит/с (кодек G711), а тут один звонок уже 8Кбит/с — выгода очевидна.
Вывести информацию по типу процессора и используемым инструкциям процессора:
$ cat /proc/cpuinfo | grep -E 'model name|flags'
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid pni cx16 popcnt hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch arat vmmcall
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good nopl extd_apicid pni cx16 popcnt hypervisor lahf_lm cmp_legacy cr8_legacy abm sse4a misalignsse 3dnowprefetch arat vmmcall
из этого вывода для текущей заметки является то какие инструкции поддерживает процессор, в моем случае это лишь: sse4a, именно для этой инструкции в дальнейшем и нужно будет скачать уже откомпилированный бинарник.
$ sudo asterisk -rvvvv
Информация по текущим установленным модулям:
$ sudo asterisk -rx "core show codecs" | grep g726
5 audio g726 (G.726 RFC3551)
6 audio g726aal2 (G.726 AAL2)
/usr/lib/asterisk/modules/codec_g726.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=50045b5d6cb366f0d4e16acdac126e0f943c948e, stripped
Файлы представленные на сайте кодеков имеет следующий формат:
- g729 → тип кодека
- ast130 → версия Asterisk 13
- gcc4 → тип компилятора
- glibc → библиотеки
- x86_64 → разрядность процессора и ОС
- core2 — тип процессора (поколение)
- sse4 → набор инструкций
Из представленного скриншота ниже видно что к примеру у меня нет кодека g729 — вот установку его и разберу.
srv-host*CLI> quit
Asterisk cleanly ending (0).
Executing last minute cleanups
Скачиваю бинарник файла кодека под свои инструкции которыми может оперировать мой процессор.
Копирую скачанный кодек в папку modules:
$ sudo mv codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so /usr/lib/asterisk/modules/
Устанавливаю скачанный кодек:
$ sudo asterisk -rvvv
srv-host*CLI> core reload
srv-host*CLI> module load codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so
Проверяю видит ли Asterisk добавленный кодек:
srv-host*CLI> core show translation
странно вывода как раньше нет, значит у меня конфликт того факта что скачанный и установленный модуль не соответствует моей архитектуре процессора. Что ж буду исправляться.
srv-host*CLI> module unload -f codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so
srv-host*CLI> quit
Asterisk cleanly ending (0).
Executing last minute cleanups
$ sudo rm /usr/lib/asterisk/modules/codec_g729-ast130-gcc4-glibc-x86_64-core2-sse4.so
$ sudo /etc/init.d/asterisk restart
$ sudo asterisk -rvvv
srv-host*CLI> core show translation
вот теперь вывод есть
$ sudo cp codec_g729-ast130-gcc4-glibc-athlon-sse.so /usr/lib/asterisk/modules/codec_g729.so
$ sudo asterisk -rx "module load codec_g729.so"
Unable to load module codec_g729.so
$ sudo file /usr/lib/asterisk/modules/codec_g729.so
/usr/lib/asterisk/modules/codec_g729.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=fd48fad20f16fe008f2e399dcb60bef6930bcdb2, stripped
codec_g729-ast130-gcc4-glibc-x86_64-opteron.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=7be3620e1cee9ad1f47e69c94c799c78d6407d19, stripped
$ sudo mv codec_g729-ast130-gcc4-glibc-x86_64-opteron.so /usr/lib/asterisk/modules/codec_g729.so
$ sudo asterisk -rx "module load codec_g729.so"
$ sudo /etc/init.d/asterisk restart
Stopping Asterisk PBX: asterisk.
Starting Asterisk PBX: asterisk.
$ sudo /etc/init.d/asterisk status
* Asterisk PBX is running
если не запущен то запускаем:
$ sudo /etc/init.d/asterisk start
Starting Asterisk PBX: asterisk.
$ sudo asterisk -rx "core show translation" | grep g729
ulaw alaw gsm g726 g726aal2 adpcm slin slin slin slin slin slin slin slin slin lpc10 g729 speex speex speex g722 testlaw opus amr amrwb
У меня было, что я не правильную версию модуля скачал, т. е. От другой версии Asterisk — и Asterisk вообще упал — так что сперва в тестовых условиях обкатайте, а уже потом если действительно нужно на боевой системе:
, но у меня он падает
$ sudo asterisk -rvvv
Unable to connect to remote asterisk (does /var/run/asterisk/asterisk.ctl exist?)
$ sudo /etc/init.d/asterisk status
* Asterisk PBX is not running
$ sudo tail -f /var/log/syslog
Jul 10 17:08:11 srv-host kernel: [18294.737419] asterisk[3756]: segfault at 40 ip 00007f1f7040c911 sp 00007ffc5e582f48 error 4 in asterisk[7f1f70349000+246000]
По мне так это из-за модуля он конфликтует с используемым типом процессора (у меня же Asterisk установлен внутри Virtualbox — я тестирую). Ладно так и быть удаляю и попробую позже на домашней системе:
$ sudo rm /usr/lib/asterisk/modules/codec_g729.so
$ sudo /etc/init.d/asterisk restart
Stopping Asterisk PBX: asterisk.
Starting Asterisk PBX: asterisk.
$ sudo asterisk -rx "core show translation" | grep g729
вывода нет значит и модуля тоже нет, Asterisk сейчас работает и в логах нет ошибок. Во общем хорошо.
Хоть я и не достиг поставленной цели данной заметкой, но в то же время узнал много нового, а именно ни в коем случае не нужно все делать на продуктиве, лучше потратить некоторое время на тест, обкатать а уже только потом трижды подумать и применять на боевой предварительно сделав бекап. И я считаю, что за сервис должен отвечать только один человек, т. к. если их много то исправив как Вам кажется что-то неправильное на Ваш взгляд Вы все порушите, потому что это был чей-то костыль. А когда весь функционал ведет один человек (к примеру Я сам), то я знаю что и для чего когда либо делалось. На этом я прощаюсь, действия данной заметки я разберу на боевой системе чуть позже и обязательно поделюсь результатами, а пока все, до новых встреч, с уважением автор блога — ekzorchik.
Используйте прокси ((заблокировано роскомнадзором, используйте vpn или proxy)) при использовании Telegram клиента:
Поблагодари автора и новые статьи
будут появляться чаще :)
Карта МКБ: 4432-7300-2472-8059
Большое спасибо тем кто благодарит автора за практические заметки небольшими пожертвованиями. С уважением, Олло Александр aka ekzorchik.
Выкладываю инструкцию по сборке и установке кодеков G729 и G723 для Asterisk из исходных кодов, тестовую сборку производил на тонком клиенте HP и на 64 битном сервере.
Кодек G729 - один из лучших кодеков по соотношению качества к сжатию аудио потока. Применяется в большинстве случаев в том случае, если есть ограничения по полосе пропускания трафика. Для его использования в промышленном использовании требуется приобретать лицензию. Лицензионное соглашение можно почитать на ]]> странице лицензионного соглашения ]]> . Кодек G729 использует скорость сжатия 8 Кбит/с, что в 8 раз меньше чем стандартный кодек alaw G711.
Для расчета занимаемой полосы пропускания, можно воспользоватся ]]> калькулятором ]]> .
Переходим в папку где у нас находятся исходные коды установленных Asterisk, dahdi, libpri, если папки нет, то создадим её віполнив команду:
Скачиваем исходники кодеков на официальном сайте командой:
Если на официальном сайте нет данного архива, либо сайт не доступен, тода Вы можете скачать данный архив с моего сайта выполнив команду:
Распаковываем скачанный архив, переходим в распакованную папку и запустим конфигурирование кодека выполнив команды:
Вносим изминения в файл build-itu.sh
Для Asterisk 1.8:
Для Asterisk 11:
Запускаем отредактированный файл командой:
После сборки кодеков, копируем кодеки G723 и G729 командой:
Перезагружаем Asterisk командой:
Проверяем подключены ли кодеки используя консоль asterisk запустив команду rasterisk либо asterisk -r и выполнив в консоли команду core show translation:
Видим в списке наши подключенные кодеки G729 и G723.
Для подключения кодеков в Asterisk, необходимо внести данные в sip.conf
Если у Вас каждому клиенту прописано насильно какой использовать кодек, тогда ему нужно прописать аналогично и кодек g729 на примере файла sip.conf
Для того, чтобы посмотреть какие кодеки используются в данный момент времени, необходимо выполнить в консоли Asterisk команду sip show channels и смотрим колонку Format:
Задача выполнена, кодеки G723 и G729 собраны и установлены, а кодек G729 подключен к Asterisk.
Читайте также: