Skip to content

Доступ к DVR по различным протоколам

Основные способы доступа к архиву

В этом разделе вы найдете URL-адреса для различных сценариев доступа к DVR для каждого из поддерживаемых протоколов, со ссылками на соответствующие методы нашего Streaming API.

Доступ к записанному архиву осуществляется на основании времени в UTC. Подобный подход реализован для удобства из-за постоянной смены летнего/зимнего времени и т.п.

На этой странице:

Сценарии доступа к DVR

Вы можете получать доступ к архиву DVR, используя следующие основные сценарии использования:

  • DVR Catchup. Проигрывание указанного окна DVR. Например, вы можете проиграть телепрограмму, если знаете время ее начала и окончания из электронной программы передач.
  • Проигрывание событий. Проигрывание текущего события с возможностью перемотки назад до указанного момента времени в секундах.
  • Перемотка. Перемотка потоков и постановка их на паузу.
  • Таймшифт. Доступ к архиву как к обычному источнику, но со сдвигом по времени.

DVR Catchup

Если ваш поток записывается в архив с помощью DVR, вы можете проиграть фрагмент видео по HLS или DASH, зная время его начала и окончания, например, из электронной программы передач.

Пример для HLS:

http://FLUSSONIC-IP:80/STREAM_NAME/archive-1652249647-3600.m3u8

Плейлист будет содержать список сегментов, начиная с UTC 1652249647 (11 мая 2022 г 06:14:07 GMT), на протяжении часа.

Проигрывание событий

Эта функция работает для HLS и DASH. Она позволяет просматривать прямую трансляцию с возможностью перемотки назад до указанного времени в секундах. Проигрывание событий может быть полезно, если вы хотите дать возможность пользователю найти конкретный момент в событии, например, в вебинаре, концерте, телевизионном шоу.

Пример для HLS:

http://FLUSSONIC-IP:PORT/STREAM_NAME/archive-1652249647-now.m3u8

1652249647 — UNIX timestamp в часовом поясе UTC.

Перемотка

Во Flussonic Media Server есть специальный плейлист со "скользящим окном", которое позволяет перематывать или ставить на паузу потоки на несколько часов. Это комбинация плейлистов DVR и прямой трансляции.

Пример для HLS:

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

7200 — продолжительность манифеста HLS в секундах, так что ваши клиенты смогут ставить поток на паузу или перематывать его к началу телевизионного шоу без необходимости создания catchup URL-адресов.

В плеере OSMF перемотка выглядит следующим образом:

dvr timeshift

Просмотр со сдвигом по времени (таймшифт)

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

Таймшифт с относительным временем

К архиву можно обратиться как к обычному источнику, но со смещением во времени.

Пример для HLS:

http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_rel-3600.m3u8

Важно отметить, что лучше использовать отдельный тип источника timeshift, описанный ниже.

Таймшифт с абсолютным временем

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

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

Пример для потока MPEG-TS с началом в 1652249647:

http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-1652249647.ts

Запуск таймшифт-потока с постоянной задержкой

Чтобы запустить дополнительный поток, который отстает от реального времени на постоянное время, следует воспользоваться дополнительным типом источников:

stream channel {
  input fake://fake;
  dvr /storage;
}
stream channel-1hour {
  input timeshift://channel/3600;
}

В системе появится новый поток, который отстает от channel ровно на один час. Если в записи будут перерывы, отставание не поменяется и будет равняться одному часу.

Повторные запросы к timeshift

Часто возникает вопрос: при повторных обращениях к одному и тому же HLS URL с использованием timeshift_abs, в плеере проигрывается разное видео. Почему так, разве абсолютный URL не должен указывать на вполне конкретное время — то, которое передали ему параметром?

Дело в том, что, когда запрашивается HLS URL для какого-то потока, Flussonic Media Server открывает для него новую сессию.
Если timeshift URL используется много раз, любой новый запрос продолжает использовать эту же самую сессию.
Иначе говоря, все запросы к видео выполняются относительно текущей сессии.
Так что, если используется одно и то же значение времени в параметре timeshift_abs, на самом деле это не совершенно «абсолютное» время, ведь оно всё еще рассчитывается относительно текущей сессии.
Поэтому каждый раз, когда запрашивается одно и то же время, оно в конечном счёте пересчитывается в разное время, и вы видите разное видео.
Это нормальное поведение, а не баг и не ошибка пользователя. Это единственный хороший способ реализовать HLS timeshift.

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

Например:
http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-1430227800.m3u8?token=123
http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-1430227800.m3u8?token=124
http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-1430227800.m3u8?token=125
И так далее.

Протоколы для доступа к DVR

Ниже вы можете найти URL-адреса для всех поддерживаемых сценариев для доступа к DVR для различных протоколов со ссылками на подробное описание и примеры. Кроме того, для каждого протокола приведена ссылка на полную спецификацию OpenAPI.

HLS

HLS поддерживает все виды сценариев для доступа к DVR:

  • DVR catchup: http://FLUSSONIC-IP:PORT/STREAM_NAME/archive-{from}-{depth}.m3u8

    См. DVR catchup playback.

  • Проигрывание события: http://FLUSSONIC-IP:PORT/STREAM_NAME/archive-{from}-now.m3u8

    См. HLS Event playlist.

  • Перемотка: http://FLUSSONIC-IP:PORT/STREAM_NAME/rewind-{ago}.m3u8

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

  • Абсолютный таймшифт: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-{from}.m3u8

    См. DVR timeshift playback.

  • Относительный таймшифт: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_rel-{ago}.m3u8

    См. DVR timeshift playback.

Полная OpenAPI спецификация: Streaming API.

DASH

DASH поддерживает следующие сцеарии доступа к DVR:

Полная OpenAPI спецификация: Streaming API.

HTTP MPEG-TS

HTTP MPEG-TS поддерживает только проигрывание DVR с таймшифтом.

  • Абсолютный таймшифт: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-{from}.ts

  • Относительный таймшифт: http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_rel-{ago}.ts

См. HTTP MPEG-TS.

Полная OpenAPI спецификация: Streaming API.

MSS

MSS поддерживает все виды сценариев доступа к DVR:

  • DVR catchup: http://FLUSSONIC-IP:PORT/STREAM_NAME(archive={from}-{depth}).isml/manifest

  • Проигрывание события: http://FLUSSONIC-IP:PORT/STREAM_NAME(archive={from}-now).isml/manifest

  • Перемотка: http://FLUSSONIC-IP:PORT/STREAM_NAME(rewind={ago}).isml/manifest

  • Абсолютный таймшифт: http://FLUSSONIC-IP:PORT/STREAM_NAME/(timeshift_abs={from}).isml/manifest

  • Относительный таймшифт: http://FLUSSONIC-IP:PORT/STREAM_NAME(timeshift_rel={ago}).isml/manifest

См. Воспроизведение MSS.

Полная OpenAPI спецификация: Streaming API.

RTMP

RTMP поддерживает только DVR catchup.

  • DVR catchup: rtmp://FLUSSONIC-IP:PORT/STREAM_NAME?from={from}&to={to}

См. Проигрывание DVR по RTMP.

RTSP

RTSP поддерживает только DVR catchup.

  • DVR catchup: rtsp://FLUSSONIC-IP:PORT/STREAM_NAME?from={from}&to={to}

См. Проигрывание DVR по RTSP.