Skip to content

Воспроизведение HLS

Flussonic Media Server поддерживает раздачу видео по протоколу HLS. Многие из доступных возможностей нестандартны для HLS, но мы поддерживаем их для вашего удобства.

Поддерживаемые кодеки: H264, H265, MPEG2 video, AAC, MP3, MPEG2 audio, AC-3.

Flussonic Media Server позволяет получать по HLS прямой эфир, видео по запросу, видео из архива (catch up и timeshift).

Если входной поток содержал DVB субтитры или телетекст, то они будут переданы в выходной поток, проигрываемый по HLS, если настроить Flussonic для этого. Если поток пишется в архив, то и субтитры сохраняются в архиве.

Содержание:

Структура протокола HLS

Принцип работы протокола HLS заключается в разбиении всего потока или файла на медиа-сегменты одинаковой длины. Сегменты представляют собой файлы с расширением .ts, которые последовательно скачиваются по HTTP. Кроме того, HLS создает файл индекса, который содержит ссылки на файлы медиа-сегментов и сохраняется с расширением .m3u8.

Вы можете использовать для проигрывания HLS разные URL, в зависимости от нужного сценария, но в любом случае, по каждому из этих URL вы получите плейлист (или манифест) одного из двух следующих типов.

Медиа-плейлист

Медиа-плейлист — это плейлист, в котором все строки обозначают отдельные медиа-сегменты. Каждый медиа-сегмент указан с помощью URI файла с расширением .ts. Плейлист дополняется новыми URI во время проигрывания. Такой плейлист используется для проигрывания простых потоков или файлов с одной видеодорожкой и одной аудиодорожкой.

Пример медиа-плейлиста:

#EXTM3U
#EXT-X-TARGETDURATION:7
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:38530
#EXT-X-PROGRAM-DATE-TIME:2022-03-22T08:06:37Z
#EXTINF:5.000,
2022/03/22/08/06/37-05000.ts
#EXTINF:5.000,
2022/03/22/08/06/42-05000.ts
#EXTINF:5.000,
2022/03/22/08/06/47-05000.ts
#EXTINF:5.000,
2022/03/22/08/06/52-05000.ts

Мастер-плейлист

Мастер-плейлист — это плейлист, в котором все строки обозначают отдельные медиа-плейлисты. Каждый медиа-плейлист указан с помощью URI файла с расширением .m3u8. Мастер-плейлист используется для проигрывания мультибитрейтных потоков или файлов. Он позволяет клиенту динамически переключаться между потоками или файлами с разным качеством.

Пример мастер-плейлиста:

#EXTM3U
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,RESOLUTION=640x480,FRAME-RATE=25.000,CODECS="avc1.4d001f,mp4a.40.2",AVERAGE-BANDWIDTH=500000,BANDWIDTH=630000
tracks-v3a1/mono.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,RESOLUTION=768x576,FRAME-RATE=25.000,CODECS="avc1.4d001f,mp4a.40.2",AVERAGE-BANDWIDTH=610000,BANDWIDTH=770000
tracks-v2a1/mono.m3u8
#EXT-X-STREAM-INF:CLOSED-CAPTIONS=NONE,RESOLUTION=960x720,FRAME-RATE=25.000,CODECS="avc1.4d001f,mp4a.40.2",AVERAGE-BANDWIDTH=650000,BANDWIDTH=820000
tracks-v1a1/mono.m3u8

Стандартное воспроизведение HLS

Если у вас есть простой live поток или файл (одно видео, один звук), то URL для воспроизведения через HLS очень простой:

http://FLUSSONIC-IP/STREAM_NAME/index.m3u8

где FLUSSONIC-IP — это пример адреса + порта вашего Flussonic Media Server.

Flussonic Media Server также принимает playlist.m3u8 в конце URL для обратной совместимости с другими серверами.

При воспроизведении мультиязычного или мультибитрейтного контента есть ряд особенностей формирования URL, описанных ниже на этой странице.

Воспроизведение по HLS fMP4 для H.265

Фрагментированный MP4 (fMP4) дает важные преимущества. Прежде всего, это единственный способ воспроизвести видео в HEVC через HLS. Кроме того, контейнер MP4 поддерживается любым плеером, в отличие от с MPEG. Формат fMP4 также может использоваться DASH, так что только манифест будет отличаться от HLS, а кодирование MP4 будет выполняться один раз для обоих протоколов.

По следующему URL можно воспроизвести HLS c кодированием в MP4-фрагменты:

http://FLUSSONIC-IP/STREAMNAME/index.fmp4.m3u8

где FLUSSONIC-IP — это пример адреса + порта вашего Flussonic Media Server.

Воспроизведение по Low-Latency HLS

Flussonic поддерживает воспроизведение по Apple Low-Latency HLS (LL-HLS).

Мультиязычный HLS

Если вы хотите воспроизвести ваш мультиязычный поток на iPhone, вам нужно использовать тот же http://192.168.2.3:80/STREAMNAME/index.m3u8

Но если вы хотите посмотреть мультиязычный поток используя VLC или приставку, нужно включать video.m3u8.

URL для плеера:

http://FLUSSONIC-IP/STREAM_NAME/video.m3u8

Это связано с тем, что, согласно требованиям Apple HLS, для каждого отдельного языка нужно указывать отдельный плейлист с audio only вариантом. В MPEG-TS другой механизм: рядом с видео укладываются все аудиодорожки, и плеер сам выбирает, что будет проигрывать. Чтобы видео можно было посмотреть на iPhone, оно должно соответствовать требованиям Apple. Но VLC и приставки, в нарушение стандарта HLS, ожидают старый вариант MPEG-TS, преобразованный в HLS. Поэтому нужно включать video.m3u8.

Добавление «Audio only» для Apple

Apple требует, чтобы у всех ваших потоков был вариант без видео, только звук.

Они считают, что если пользователь смотрит видео по 3G и, оказавшись в зоне неуверенного приема, лучше у него будет только звук, чем буферизация.

Вы можете включить эту опцию в Flussonic Media Server следующим образом:

stream example {
  input file://vod/bunny.mp4;
  add_audio_only;
}

Note

Такая настройка может сделать ваш index.m3u8 адрес невоспроизводимым в VLC или на приставке. В этом случае используйте video.m3u8 (см. выше).

Отдельные плейлисты для STB-приставок

Когда у вас есть мультибитрейтный мультиязычный контент и вы хотите проиграть его на приставке, которая не поддерживает мультибитрейтные HLS-плейлисты, вы можете запросить с Flussonic Media Server отдельные плейлисты с одним видео и всеми звуковыми дорожками, как с опцией mono:

http://FLUSSONIC-IP/STREAM_NAME/mono.m3u8

Этот плейлист не мультибитрейтный (не вариантный), в нем URL до сегментов, в которых первая видео дорожка и все доступные звуковые дорожки.

Если вы хотите доставлять мультиязычные мультибитрейтные потоки на приставки, не понимающие стандарт Apple для мультиязычности, используйте video.m3u8:

http://FLUSSONIC-IP/STREAM_NAME/video.m3u8

Это мультибитрейтный плейлист, который отдает список плейлистов с разными качествами: video1.m3u8, video2.m3u8 и т.д.

Отдельные плейлисты для аудио

HLS-поток может содержать несколько аудиодорожек. Некоторые Smart TV (например, Samsung TV) и браузеры, поддерживающие стандарт MSE (Media Source Extensions), не умеют переключаться между таковыми. Несколько аудиодорожек используется, например, для адаптирования контента для нескольких стран и народов. В результате плееры проигрывают только одну дорожку аудио, или же поток может вовсе не воспроизводиться.

Flussonic может отдать на выход плейлист с отдельным аудио. Используйте separate_audio=true в строке запроса HLS-плейлиста для плеера, чтобы получить отдельный плейлист с аудио:

http://FLUSSONIC-IP/STREAM_NAME/index.m3u8?separate_audio=true

Вот как будет выглядеть плейлист:

#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="eng a1",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="eng",URI="tracks-a1/mono.m3u8"
#EXT-X-STREAM-INF:AUDIO="aac",CLOSED-CAPTIONS=NONE,RESOLUTION=320x240,FRAME-RATE=25.000,CODECS="avc1.420015,mp4a.40.2",AVERAGE-BANDWIDTH=240000,BANDWIDTH=310000
tracks-v1/mono.m3u8

Эта опция работает live-трансляций, VOD и DVR.

Например, для DVR плейлист можно запросить по следующей ссылке:

http://FLUSSONIC-IP/STREAM_NAME/archive-1643098810-30.m3u8?separate_audio=true

Ниже приведён пример такого плейлиста для DVR:

#EXTM3U
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="aac",NAME="eng a1",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="eng",URI="tracks-a1/index-1643098810-30.m3u8"
#EXT-X-STREAM-INF:AUDIO="aac",CLOSED-CAPTIONS=NONE,RESOLUTION=320x240,FRAME-RATE=25.000,CODECS="avc1.420015,mp4a.40.2",AVERAGE-BANDWIDTH=240000,BANDWIDTH=300000
tracks-v1/index-1643098810-30.m3u8

Проигрывание DVR по HLS

DVR catchup playback

Когда ваш поток уже записан на сервере нашим DVR, вы можете воспроизвести видео через HLS, используя время начала и длительность передачи (например, из EPG).

URL будет:

http://FLUSSONIC-IP/STREAM_NAME/archive-1659507585-3600.m3u8

Этот плейлист имеет тип VOD (static). Он будет отдавать список сегментов начиная с UTC 1659507585 (3 августа 2022г, 06:19:45 GMT) и на один час вперед. Это будет завершенный плейлист, он не будет меняться со временем.

Вы можете получить плейлист типа EVENT (append-only), если конец периода находится в настоящем или будущем. Для этого добавьте в URL параметр event=true. Такой плейлист будет отдавать список сегментов начиная с UTC 1659507585 (3 августа 2022г, 06:19:45 GMT) вплоть до настоящего момента. К плейлисту со временем будут добавляться новые сегменты, а все предыдущие сегменты сохранятся. Если вы вызовете тот же самый URL спустя некоторое время, когда указанный конец периода окажется в прошлом – плейлист уже будет иметь тип VOD.

URL mono даст список сегментов, содержащих все дорожки, в MPEG-TS:

http://FLUSSONIC-IP/STREAM_NAME/mono-1659507585-3600.m3u8

Более конкретный videoN плейлист даст список сегментов с N видео дорожкой и всеми звуковыми дорожками:

http://FLUSSONIC-IP/STREAM_NAME/video1-1659507585-3600.m3u8

и variant видео плейлист со списком videoN плейлистов, который можно использовать в старых видеоприставках и VLC:

http://FLUSSONIC-IP/STREAM_NAME/video-1659507585-3600.m3u8

Note

Не используйте URL-адрес video для браузеров и современных клиентов. В большинстве случаев рекомендуем использовать стандартный URL-адрес archive для получения плейлиста для видео с нескольким битрейтами или несколькими языками.

HLS Event playlist

Вы можете запросить HLS Event плейлист по ссылке:

http://FLUSSONIC-IP/STREAM_NAME/index-1659507585-now.m3u8

Event плейлисты используются для того, чтобы дать клиенту возможность перемотатывать видео в рамках идущего мероприятия, например, вебинара, концерта или текущей ТВ программы. Такой плейлист будет отдавать список сегментов начиная с UTC 1659507585 (3 августа 2022г, 06:19:45 GMT) вплоть до настоящего момента. К плейлисту со временем будут добавляться новые сегменты, а все предыдущие сегменты сохранятся.

Обратите внимание, что плеер начнет проигрывание с прямого эфира, для доступа к архиву нужно перемотать в плеере.

Перемотка плейлиста

Есть специальный плейлист "rewind-N.m3u8" с большим «скользящим» окном, позволяющий перематывать и ставить на паузу HLS потоки на долгие часы.

http://FLUSSONIC-IP/STREAM_NAME/rewind-7200.m3u8

7200 — длина HLS плейлиста в секундах. Это означает, что ваши клиенты могут поставить эфир на паузу на 2 часа или перемотать на начало футбольного матча без обращения по специальными архивным ссылкам.

DVR timeshift playback

Если у вас есть поток, записываемый на диск, но вы не настроили отложенный поток, вы можете проиграть видео со сдвигом по времени с помощью правильно построенного HLS адреса.

Относительный таймшифт:

  • Проигрывание на ago секунд назад: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_rel-{ago}.m3u8

Абсолютный таймшифт:

  • Проигрывание с момента from по UTC: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-{from}.m3u8

DVR fMP4 по HLS

Для проигрывания DVR в формате fMP4 по протоколу HLS поддерживаются такие же форматы ссылок, как и для обычного HLS:

  • DVR catchup: http://FLUSSONIC-IP:PORT/STREAM_NAME/archive-{from}-{depth}.fmp4.m3u8
  • DVR window: http://FLUSSONIC-IP:PORT/STREAM_NAME/index-{from}-{duration}.fmp4.m3u8
  • Event playlist: http://FLUSSONIC-IP:PORT/STREAM_NAME/archive-{from}-now.fmp4.m3u8
  • Rewind: http://FLUSSONIC-IP:PORT/STREAM_NAME/rewind-{ago}.fmp4.m3u8
  • Абсолютный DVR timeshift: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-{from}.fmp4.m3u8
  • Относительный DVR timeshift: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_rel-{ago}.fmp4.m3u8

Подробнее о том, зачем нужно проигрывание fMP4 по HLS, см. выше.

Воспроизведение отдельных дорожек

Если у потока есть несколько аудио- и видеодорожек, то вы можете указать, какие именно дорожки следует проигрывать.

Для этого укажите номера дорожек в параметре filter.tracks, добавив его в конец URL потока.

Примеры:

  • Выбрать первую аудио- и вторую видеодорожки:
http://FLUSSONIC-IP/STREAM_NAME/index.m3u8?filter.tracks=v2a1
  • Выбрать только видео:
http://FLUSSONIC-IP/STREAM_NAME/index.m3u8?filter.tracks=v1
  • Выбрать Проигрывание отрывка длиной 3600 секунд из DVR архива, начиная со времени UTC 1362504585:
http://FLUSSONIC-IP/STREAM_NAME/archive-1362504585-3600.m3u8?filter.tracks=v2a1

Сортировка треков в мультибитрейтном плейлисте

Для мультибитрейтного потока все треки перечисляются в мастер-плейлисте. По умолчанию видеотреки сортируются по возрастанию битрейта, т.е. проигрывание начинается с видеотрека с самым низким битрейтом.

Если вы хотите изменить порядок треков и начать проигрывание с другого трека, вы можете использовать для этого параметр filter.tracks. Укажите в этом параметре номера видео- и аудиотреков в нужном порядке, и в результате треки в плейлисте будут отсортированы соответственно. Например:

http://FLUSSONIC-IP/STREAM_NAME/index.m3u8?filter.tracks=v3v2v1a2a1

В этом случае треками по умолчанию будут v3 и a2.

Добавление скриншотов в плейлист HLS

В плейлист HLS можно добавить скриншоты как специальные теги, которые сможет прочитать плеер. Это можно сделать как для потока с включенным DVR, так и для VOD-файла.

Чтобы добавить скриншоты в плейлист, добавьте в URL потока или VOD-файла опцию ?thumbnails=.

Пример для окна DVR потока:

http://flussonic:80/ort/index-1644304617-60.m3u8?thumbnails=50

Пример для VOD-файла:

http://flussonic:80/vod/bunny.mp4/index.m3u8?thumbnails=100

Указанное значение определяет, сколько ссылок на скриншоты будет добавлено в плейлист, чтобы покрыть продолжительность окна DVR или VOD-файла соответственно. Плеер добавит на полосу проигрывания скриншоты через равные интервалы времени. Продолжительность интервала между скриншотами равна всей продолжительности окна DVR или VOD-файла, разделенной на это значение.

Если указать слишком большое число, плеер будет использовать дополнительные ресурсы, что может привести к зависанию плеера или браузера. Уменьшив этот параметр, можно ограничить количество скриншотов и, таким образом, уменьшить расход ресурсов.

Для работы этой опции в настройках потока или VOD-файла необходимо указать параметры thumbnails enabled=ondemand и size (размер скриншотов). Например: thumbnails enabled=ondemand size=320x240;. Можно указать несколько размеров через пробел, например, size=320x250 size=640x480. В этом случае в плейлист будет включено несколько треков со скриншотами. Каждый скриншот в соответствующем треке будет пропорционально уменьшен, чтобы уместиться в указанный размер.

Больше информации можно найти в схеме Streaming API.