Asterisk: No translation path from codec to codec (Ошибки транскодинга)
- В логах фиксируется
WARNING[4567]: translate.c: No translation path from (g729) to (alaw)или(opus) to (ulaw). - Сброс звонка с кодом SIP
488 Not Acceptable Hereили606 Not Acceptable. - Абонент слышит короткие гудки сразу после попытки соединения с транком или голосовым меню (IVR).
- Команда
core show translationпоказывает пустые ячейки (дефисы) между используемыми кодеками.
1. Проверка доступных матриц транскодинга
asterisk -rx "core show translation"2. Проверка поддерживаемых кодеков эндпоинта и транка
Откройте /etc/asterisk/pjsip.conf и проверьте списки allow и disallow:
[endpoint-template](!)
type = endpoint
disallow = all
allow = alaw,ulaw,g722,opus
[trunk-provider]
type = endpoint
disallow = all
allow = alaw,ulaw3. Установка отсутствующих модулей кодеков (Opus / G.729)
Для Ubuntu/Debian установите кодек Opus:
apt-get install -y asterisk-opus
# Либо загрузите официальный бинарник с downloads.digium.com в /usr/lib/asterisk/modules/Загрузите модуль в консоли:
asterisk -rx "module load codec_opus.so"
asterisk -rx "module load codec_g729.so"4. Настройка файла codec_opus.conf
Создайте /etc/asterisk/codec_opus.conf для совместимости битрейтов:
[general]
type=opus
samplerate=48000
maxplaybackrate=48000
packet_loss=10
cbr=0
fec=15. Перезагрузка модулей кодеков
asterisk -rx "core reload" Частые вопросы (FAQ)
Почему возникает ошибка 'No translation path'?
Ошибка означает, что один абонент использует кодек А, другой кодек Б, а в Asterisk отсутствует модуль транскодирования между ними (например, нет codec_opus.so для перевода Opus в G.711a).
Как разрешить сквозной пропуск кодека (passthrough) без транскодинга?
Если оба плеча звонка поддерживают один и тот же кодек (например, G.729), разрешите его на обоих эндпоинтах (allow=g729). Asterisk будет передавать RTP-пакеты напрямую без распаковки.
Как транскодинг влияет на нагрузку CPU сервера?
Транскодинг (особенно тяжелых кодеков, таких как G.729, Opus, Speex) создает значительную нагрузку на процессор. Для высоконагруженных call-центров рекомендуется использовать несжатые кодеки G.711 alaw/ulaw или G.722.
Почему IVR или Playback() сбрасывают вызов при отсутствии кодека?
Голосовые файлы Asterisk хранятся в определенных форматах (.wav, .alaw, .gsm). Если файл записан в alaw, а клиент подключен только по g729 без модуля трансляции, воспроизведение невозможно и звонок завершается.