Asterisk: res_format_attr_opus.c OPUS parameter validation failure in SDP
- Ошибка в журнале:
ERROR: res_format_attr_opus.c: OPUS parameter validation failure in SDP. - Звонки с WebRTC клиентов, софтфонов или мобильных приложений с кодеком Opus сбрасываются на этапе согласования SDP.
- Отсутствие односторонней или двухсторонней слышимости (One-way Audio) при звонках между WebRTC и PSTN.
- SIP-ответ
SIP/2.0 488 Not Acceptable Hereпри согласовании кодеков.
1. Проверка и установка официального кодека codec_opus
Убедитесь, что модуль транскодирования Opus установлен и загружен:
asterisk -rx "core show codecs like opus"
asterisk -rx "module show like opus"2. Настройка параметров кодека в /etc/asterisk/codecs.conf
Скорректируйте параметры профиля Opus для строгого соответствия спецификации RFC 7587:
[opus]
type = opus
; Оптимальный битрейт для голоса (бит/сек)
max_average_bitrate = 24000
; Максимальный битрейт воспроизведения
max_playback_rate = 16000
; Отключение стерео для экономии полосы
sprop_stereo = 0
sprop_max_capture_rate = 16000
; Активация Inband FEC (защита от потери пакетов)
fec = 1
dtx = 1
cbr = 03. Настройка порядка и разрешения кодеков в pjsip.conf
В секции endpoint задайте явный порядок согласования:
[webrtc_endpoint]
type = endpoint
context = from-internal
disallow = all
allow = opus,alaw,ulaw
media_use_received_transport = yes
rtp_symmetric = yes
force_rport = yes
rewrite_contact = yes4. Перезагрузка модулей кодеков и трансляции
asterisk -rx "module reload res_format_attr_opus.so"
asterisk -rx "module reload codec_opus.so"
asterisk -rx "pjsip reload" Частые вопросы (FAQ)
Почему возникает ошибка валидации параметров Opus в SDP?
Ошибка возникает, когда удаленный клиент (например браузер в WebRTC) отправляет в строке 'a=fmtp:111' значения параметров (например, некорректный samplerate, стерео режим или завышенный битрейт), которые парсер Asterisk признает невалидными.
В чем разница между res_format_attr_opus и codec_opus?
res_format_attr_opus отвечает за парсинг и согласование параметров SDP атрибутов кодека, а codec_opus — за непосредственное математическое кодирование и декодирование аудиоданных.
Поддерживает ли Asterisk транскодирование Opus в G.711a (alaw)?
Да, при наличии загруженного модуля codec_opus Asterisk выполняет прозрачное транскодирование между широкополосным Opus и телефонными кодеками alaw/ulaw.
Что дает включение параметра FEC (Forward Error Correction)?
FEC позволяет восстанавливать потерянные пакеты на нестабильных Wi-Fi/LTE сетях без повторной передачи, значительно повышая разборчивость речи.