HLS по природе буферизует видео сегментами, поэтому небольшая задержка нормальна. Но если HLS поток отстает на несколько минут, проблема обычно в длине сегментов, playlist, encoder, CDN-кэше или настройках плеера.
Сначала нужно измерить задержку на каждом участке: encoder, origin, CDN и player. Иначе легко менять плеер, хотя задержка накопилась на сервере или CDN.
Коротко: что делать
- Проверить длительность сегментов и размер playlist
- Сравнить время на encoder, origin и CDN
- Проверить cache-control для m3u8 и сегментов
- Посмотреть буфер плеера и live edge
- Оценить, нужен ли Low-Latency HLS
Основные причины
Большая задержка появляется, когда система держит слишком много сегментов между реальным эфиром и зрителем.
- Сегменты слишком длинные
- Playlist хранит много старых сегментов
- CDN кэширует m3u8 дольше, чем нужно
- Плеер начинает далеко от live edge
- Encoder или transcoder создает задержку до публикации сегментов
Пошаговая диагностика
Диагностика должна показать, где именно образуется лаг: до HLS, в HLS или уже на стороне плеера.
- Посмотреть target duration и количество сегментов в playlist
- Сравнить timestamp сегмента с реальным временем
- Проверить заголовки кэша m3u8
- Открыть поток напрямую без CDN
- Проверить настройки player buffer и liveSync
Как исправить проблему
Исправление обычно состоит в уменьшении сегментов, правильном кэше playlist и настройке плеера ближе к live edge.
- Уменьшить длительность сегмента при допустимой нагрузке
- Настроить короткий TTL для m3u8
- Ограничить глубину live playlist
- Настроить плеер на меньший live latency
- Рассмотреть Low-Latency HLS, если нужна задержка в секунды
Безопасный план решения
Не уменьшайте сегменты сразу до минимума на production. Сначала протестируйте нагрузку на encoder, origin и CDN, потому что низкая задержка повышает требования к инфраструктуре.
Чего не стоит делать
- Не кэшировать m3u8 как обычный статический файл
- Не путать задержку encoder и задержку плеера
- Не обещать нулевую задержку на обычном HLS
- Не уменьшать buffer так сильно, чтобы поток начал постоянно прерываться
Что подготовить перед исправлением
- Ссылка на HLS playlist
- Настройки encoder
- Используемый CDN и плеер
- Текущая и желаемая задержка
FAQ
Можно ли сделать HLS без задержки?
Полностью без задержки — нет. Можно уменьшить ее до приемлемого уровня или перейти на low-latency подход.
Почему через CDN задержка больше?
CDN может кэшировать playlist или отдавать старые сегменты. Нужно проверить TTL и заголовки.
Что важнее: сегменты или плеер?
Оба слоя важны. Если playlist уже отстает, плеер не сможет показать эфир быстрее.
Когда стоит обратиться за помощью
Помощь нужна, если трансляция коммерческая, идет через CDN или нужна низкая задержка без постоянных буферизаций.
Итог
Начните с playlist, длины сегментов и кэша m3u8. Если нужно настроить HLS/RTMP, CDN и плеер, можно написать в Telegram @rabotator_support.