Устранение неполадок стриминга, WebRTC и HLS
В данном руководстве описаны способы диагностики и решения проблем с воспроизведением live-видео, согласованием WebRTC WHEP, буферизацией HLS и ошибками браузерных декодеров.
1. WebRTC / WHEP: Ошибка согласования ICE (Connection Failed)
Если в веб-плеере отображается бесконечная загрузка или ошибка ICE failed:
Причины и пошаговые решения:
| Причина | Индикатор в логах/консоли | Решение |
|---|---|---|
Не указан public_ip | Клиент получает только локальный IP (10.x.x.x или 172.x.x.x) | Укажите ваш внешний IP: webrtc.public_ip: "ВНЕШНИЙ_IP" в config.yaml. |
| Закрыт диапазон UDP | В консоли браузера статус ICE failed через 5–10 секунд | Откройте диапазон портов UDP 50000-50100 в фаерволе и Security Group облачного провайдера. |
| Незащищённое HTTP соединение | Браузер блокирует WebRTC API | Браузеры требуют контекст HTTPS для WebRTC. Настройте SSL-сертификаты. |
| Симметричный NAT | Ошибка возникает только у клиентов через мобильный интернет / корпоративный Wi-Fi | Настройте TURN-сервер в секции webrtc.turn_servers в config.yaml. |
2. HLS: Бесконечная буферизация или чёрный экран
Причина A: Кодек H.265 (HEVC) в неподдерживаемых браузерах
- Симптом: Звук воспроизводится, но видео остаётся чёрным или появляется ошибка декодера.
- Объяснение: Браузеры Chrome и Firefox требуют аппаратной поддержки и WebCodecs для H.265. Safari на macOS/iOS поддерживает H.265 в HLS нативно.
- Решение: Для универсальной совместимости со всеми браузерами переключите видеопоток камеры на кодек H.264.
Причина B: Отсутствие параметров кодека SPS / PPS
- При подключении клиента в середине трансляции Кольцевой буфер (Ring Buffer) атомарно кеширует параметры
CodecParamsи подставляет их перед ключевым кадром. - Убедитесь, что камера регулярно отправляет ключевые кадры (GOP 1-2 секунды).
3. Рассинхронизация звука и видео
Если аудио отстаёт или опережает видео при просмотре:
- Джиттер меток времени камеры: Некоторые камеры при перегрузке процессора передают нестабильные PTS-метки звука.
- Формат аудио: Убедитесь, что звук кодируется в AAC (48 кГц или 44.1 кГц). Избегайте устаревших кодеков G.726.