Moment Video Server
Протокол Apple HTTP Live Streaming (HLS)

Протокол HLS используется для передачи потокового видео на мобильные устройства Apple (iPhone, iPad, Mac) и на устройства с ОС Android. Поддержку протокола HLS в видеосервере «Момент» обеспечивает модуль mod_hls.

По протоколу HLS можно передавать видео, закодированное кодеком h.264 и звук, закодированный кодеком AAC. Большинство устройств поддерживают профиль "baseline" кодека h.264 (baseline profile) и звук в формате AAC LC.

Настройка

В большинстве случаев mod_hls не требует какой-либо дополнительной настройки. Достаточно только убедиться в том, что он включен, т.е. что параметр mod_hls/enable имеет значение "включено".

Для передачи по HLS потоков без видео или без аудио следует установить параметры mod_hls/no_video и mod_hls/no_audio соответственно.

Пример настройки модуля mod_hls:

  mod_hls {
    enable = y
    no_audio = n
    no_video = n
  }

Использование

Ссылки на HLS-потоки имеют вид:
http://1.2.3.4:8080/hls/test.m3u8
где "test" — имя потока, 1.2.3.4 — IP-адрес сервера, 8080 — порт moment/http_bind в конфиге.

Для показа HLS-видео на веб-странице достаточно использовать тег <video> следующим образом:

  <video autoplay controls src="http://1.2.3.4/hls/test.m3u8">
    Для просмотра видео требуется поддержка протокола Apple HLS.
  </video>

Второй вариант показа видео - через нативное приложение, написанное под конкретную мобильную платформу. Этот вариант хорошо подходит для показа видео как в iOS, так и на Android-устройствах.

Много информации об использовании HLS можно найти на веб-сайте Apple.

HTTP URI-путь /hls/ зарезервирован для mod_hls. Этот путь нельзя использовать для других целей (в частности, как prefix в секции mod_file).

Список параметров

Доступные параметры конфигурации модуля mod_hls:

mod_hls/enable — включить модуль mod_hls. По умолчанию: "yes" (mod_hls включен).

mod_hls/no_audio — Не включать аудиотрек в отдаваемые HLS-потоки. В случае, если в HLS-потоке заявлена звуковая дорожка, но нет аудиоданных, воспроизведение потока в плеере начинается со значительной задержкой, когда плеер принимает решение начать показ видео не смотря на отсутствие ожидаемых аудиоданных. По умолчанию: "no" (отправлять аудио).

mod_hls/no_video — Не включать видеотрек в отдаваемые HLS-потоки. В случае, если в HLS-потоке заявлено наличие видео, но нет видеоданных, воспроизведение потока в плеере начинается со значительной задержкой, когда плеер принимает решение начать показ не смотря на отсутствие ожидаемых видеоданных. По умолчанию: "no" (отправлять видео).

mod_hls/no_rtmp_audio — Не включать аудио для видеопотоков, публикуемых на сервере RTMP-клиентами.

mod_hls/no_rtmp_video — Не включать видео для потоков, публикуемых на сервере RTMP-клиентами.

mod_hls/stream_timeout — Таймаут удаления HLS-потока на сервере, в секундах. В обычном режиме HLS-поток удаляется спустя stream_timeout секунд после удаления исходного видеопотока. До момента удаления HLS-потока клиенты ещё могут загружать хвостовые сегменты. В режиме "realtime" поток удаляется, если в течение интервала stream_timeout от клиента не поступило ни одного запроса на загрузку HLS-сегмента. По умолчанию: 60 секунд.

mod_hls/watcher_timeout — таймаут в миллисекундах, используемый для определения, есть ли в данный момент HLS-клиенты, смотрящие конкретный видеопоток. Этот таймаут может использоваться при настройке подключения к источникам видео по запросу (см. параметр модуля mod_gst mod_gst/connect_on_demand) и при настройке включения/выключения транскодера Speex->AAC. По умолчанию: 5000 миллисекунд (5 секунд).

mod_hls/segment_duration — Длительность одного HLS-сегмента в миллисекундах. Это одна из основных характеристик HLS-потока (см. также параметр mod_hls/target_duration). Следует учитывать, что воспроизведение потока в HLS-плеерах не начинается до тех пор, пока клиент не загрузит полностью хотя бы один сегмент. Это также означает, что задержка воспроизведения видео в плеере относительно реального времени не может быть меньше, чем segment_duration. Слишком малые значения segment_duration приводят к задержкам воспроизведения на клиенте, перерасходу сетевого трафика, повышенной нагрузке на сервер из-за частых HTTP-запросов на загрузку HLS-сегментов. Значение segment_duration (а также target_duration), рекомендуемое Apple — не менее 10 секунд. По умолчанию: 1000 миллисекунд (1 секунда).

mod_hls/target_duration — Значение target_duration соответствует длине HLS-сегмента в секундах. В большинстве случаев target_duration должно быть равно значению параметра mod_hls/segment_duration, поделённому на 1000 (т.к. segment_duration задаётся в миллисекундах). Значение target_duration помещается в поле #EXT-X-TARGETDURATION в списках HLS (m3u8), а также используется для определения интервалов срабатывания внутренних таймеров удаления старых данных видеопотока. По умолчанию: 1 секунда.

mod_hls/max_segment_len — Максимальная длина HLS-сегмента в байтах. По умолчанию: 16777216 (16 МБ).

mod_hls/one_session_per_streammod_hls может работать в двух режимах. Основной режим — общее сегментирование потока для всех клиентов (one_sssion_per_stream=y). В этом режиме поток разбивается на HLS-сегменты однократно, затем полученные сегменты рассылаются всем смотрящим клиентам. Второй режим — сегментирование потока отдельно для каждого клиента (one_session_per_stream=n). Этот режим позволяет уменьшить среднюю задержку воспроизведения потока на клиенте, при этом нагрузка на систему в расчёте на одного клиента выше. По умолчанию: "yes" (использовать общее сегментирование).

mod_hls/num_real_segments — Количество заполненных сегментов с реально собранными (готовыми к воспроизведению) видеоданными, которые помещаются в список сегментов HLS, отдаваемый клиентам. Задержка воспроизведения видео в плеере не может быть меньше, чем segment_duration * num_real_segments. По умолчанию: 2.

mod_hls/num_lead_segments — Количество ещё не заполненных сегментов, которые помещаются в хвост списка сегментов HLS, отдаваемого клиентам. По умолчанию: 1.

mod_hls/insert_au_delimiters — Вставлять в поток дополнительные разделители access units. Если этот параметр не задан (значение "no"), то дополнительные разделители добавляются только для потоков, публикуемых на сервере RTMP-клиентами — этого достаточно для корректной работы в большинстве случаев. По умолчанию: "yes" (добавлять разделители).

mod_hls/send_codec_data — Вставлять в поток настройки кодека h.264 (SPS, PPS) с определённом интервалом (параметр mod_hls/codec_data_interval). Если этот параметр не задан (значение "no"), то настройки кодека добавляются только для потоков, публикуемых на сервере RTMP-клиентами — этого достаточно для корректной работы в большинстве случаев. По умолчанию: "yes" (вставлять в поток настройки кодека).

mod_hls/codec_data_interval — Интервал добавления настроек h.264 в поток, в миллисекундах. См. параметр mod_hls/send_codec_data. По умолчанию: 1000 миллисекунд (1 секунда).

mod_hls/realtime_mode — в режиме "realtime" данные HLS-сегментов отправляются клиентам немедленно, даже если сегмент сформирован не полностью. Сегменты при этом имеют фиксированный размер в байтах (параметр mod_hls/realtime_target_len). На практике уменьшения задержки воспроизведения в этом режиме не наблюдается, т.к. плееры не начинают воспроизведение сегмента до его полной загрузки. Использовать режим "realtime" не рекомендуется, за исключением случаев, когда это может быть полезно для тестирования — например, при разработке HLS-плееров. По умолчанию: "no" (выключено).

mod_hls/realtime_target_len — Длина HLS-сегмента в байтах в режиме "realtime" (см. параметр mod_hls/realtime_mode). Это число должно быть кратно 188, т.е. размеру пакета MPEG TS. По умолчанию: 94000 (равняется 500 * 188).

mod_hls/num_dummy_starters — Количество пустых HLS-сегментов, состоящих из одного разделителя access units, помещаемых в список сегментов HLS в начале потока. Экспериментальный параметр. По умолчанию: 0.



К содержанию