Анализ причин отсутствия звука (Dead Air): несовпадение портов RTP
- Звонок успешно соединяется, таймер разговора идет, но в трубке полная тишина (Dead Air) у обоих абонентов.
- Односторонняя слышимость: один абонент слышит речь, второй — нет.
- Аудиопоток обрывается через 5-10 секунд после начала диалога.
- В логах АТС фиксируются ошибки
RTP Read TimeoutилиNo RTP incoming packets detected.
1. Анализ дескриптора SDP в пакетах 200 OK / INVITE
Проверьте адреса и порты в секции SDP:
v=0
o=root 1234 1234 IN IP4 203.0.113.1
s=Asterisk
c=IN IP4 203.0.113.1
t=0 0
m=audio 14520 RTP/AVP 8 101Убедитесь, что строка c= содержит маршрутизируемый публичный IP, а строка m=audio указывает открытый UDP-порт.
2. Проверка диапазона RTP-портов на АТС
В конфигурации rtp.conf (Asterisk) проверьте диапазон:
[general]
rtpstart=10000
rtpend=200003. Открытие и проброс портов на межсетевом экране (iptables / nftables)
# Разрешить входящий RTP трафик
iptables -A INPUT -p udp -m udp --dport 10000:20000 -j ACCEPT
# Если АТС за NAT, настройте Port Forwarding (DNAT)
iptables -t nat -A PREROUTING -i eth0 -p udp --dport 10000:20000 -j DNAT --to-destination 192.168.1.104. Включение Symmetric RTP (comedia)
Если удаленный клиент шлет медиа с порта, отличного от указанного в SDP, включите принудительный симметричный RTP (Asterisk rtp_symmetric=yes или FreeSWITCH auto-rtp-bugs).
Частые вопросы (FAQ)
В чем разница между Dead Air и One-Way Audio?
Dead Air означает полное отсутствие голосовых RTP-пакетов в обоих направлениях (симметричная блокировка). One-Way Audio — когда один медиапоток успешно доходит, а обратный отфильтрован фаерволом или направлен на некорректный IP.
Почему тишина возникает при переадресации вызова на внешнего провайдера?
При переадресации провайдер может отправлять Re-INVITE с локальным адресом третьего узла, который недоступен напрямую, если в настройках транка не включен ре-анкоринг медиапотока (Direct Media = no).
Какой объем UDP-портов нужен на 100 одновременных вызовов?
На один вызов требуется 2 UDP-порта (один для RTP-голоса, второй для RTCP-статистики). Для 100 одновременных разговоров требуется минимум 200 портов (рекомендуется выделить пул из 2000 портов с запасом).
Что означает директива c=IN IP4 0.0.0.0 в SDP?
Указание адреса 0.0.0.0 в строке c= является устаревшим способом перевода вызова в режим удержания (Call Hold). В современных RFC используется директива a=sendonly или a=inactive.