Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

SDP_CODEC_NEGOTIATION_ERR IP-Телефония и СКУД

Диагностика согласования кодеков (Codec Negotiation) в SDP: m=, rtpmap, fmtp

Обновлено: 24.08.2026 · Официальная документация ↗
  • Звонок мгновенно сбрасывается с ошибкой SIP/2.0 488 Not Acceptable Here или 606 Not Acceptable.
  • В логах сервера фиксируется Unable to negotiate codec или No compatible codecs found.
  • Звук искажен из-за несовпадения параметров частоты дискретизации или времени упаковки фрейма (ptime).

1. Разбор секции кодеков в теле SDP

Пример предложения кодеков в INVITE:

m=audio 10500 RTP/AVP 8 0 18 101
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20

2. Причины сбоя согласования (Ошибка 488)

  • Полное отсутствие общих кодеков: клиент шлет только G.722, а транк оператора принимает строго G.711a (PCMA).
  • Несовпадение параметров fmtp: несовместимость профилей (например, AMR-WB, Opus или H.264 packetization-mode).
  • Запрет транскодинга: на АТС выключен модуль транскодинга, а абоненты используют разные кодеки.

3. Конфигурация разрешенных кодеков в Asterisk PJSIP

# pjsip.conf
[endpoint-trunk]
type=endpoint
# Запретить все и разрешить строго нужные по приоритету
disallow=all
allow=alaw
allow=ulaw
allow=g729

# Для HD Voice терминалов:
; allow=g722
; allow=opus

4. Управление размером фрейма (ptime)

Большинство систем ожидает ptime=20 (20 мс аудио во фрейме). Нестандартные ptime=30 или ptime=10 могут приводить к отказу шлюза оператора:

# Принудительная установка ptime
[endpoint]
codec_prefs_outgoing = caller, alaw:20, ulaw:20
💡 Практика специалистов: Для максимальной совместимости в РФ всегда ставьте кодек ALaw (PCMA / G.711a) первым в списке приоритетов транков. G.729 используйте только при жестком дефиците полосы пропускания.

Частые вопросы (FAQ)

В чем разница между статическими и динамическими Payload Types?

Статические номера (0 для PCMU, 8 для PCMA, 18 для G.729) жестко зафиксированы в RFC 3551. Динамические номера (96-127) назначаются произвольно через атрибут a=rtpmap (например, для Opus, G.722.1 или telephone-event).

Что означает опция 'annexb=no' для кодека G.729?

Она отключает алгоритм генерации комфортного шума (VAD/CNG). Если у одной стороны выставлено annexb=yes, а у другой annexb=no, согласование завершится ошибкой.

Почему транскодинг нагружает сервер телефонии?

Транскодинг требует полной декомпрессии аудиопотока в несжатый PCM с последующим кодированием в целевой формат на лету для каждого голосового пакета.

Как кодек Opus согласует полосу пропускания в SDP?

Через параметры a=fmtp:111 maxplaybackrate=16000; sprop-maxcapturerate=16000; stereo=0; useinbandfec=1.

Полезные материалы
Рекомендуем