Работа с архивом DVR в Middleware¶
Эта статья должна помочь разработчику Middleware реализовать работу с архивом видео для реализации следующих задач пользователя:
- поставить прямой эфир на паузу, сходить покурить
- посмотреть текущую передачу с начала, потому что фильм понравился и надо сначала
- посмотреть вчерашнюю передачу
- отложить понравившуюся передачу в закладки, пересмотреть через пару месяцев
Проблема по которой существует эта статья заключается в том, что единственный протокол, который технически может решать эти проблемы - это RTSP, но от него давно отказались и перешли на сегментные HTTP: HLS, DASH (и немного MSS). Оба основных протокола для IPTV OTT не поддерживают эту функциональность из коробки и поэтому необходимы технологические исхищрения для решения этих задач.
В медиа сервере мы предлагаем несколько подходов к решению указанных задач. Названия наши собственные, не являются индустриальным стандартом.
short name | pros | cons |
---|---|---|
epg-vod | работает пауза, ускоренная перемотка | нужен код на плеере; нужна поддержка перемотки в event |
pseudo-live | без доработки клиента играет архив с любой точки | нельзя ставить на паузу, ускорять |
Как же правильнее всего организовать доступ к архиву?
С помощью epg-vod проигрывания архива и event проигрывания лайва.
Проигрывание архива по EPG¶
Для работы этого метода, Middleware должна хранить у себя достаточно точное расписание EPG. Здесь и далее будут отсылки к понятию таймстемпа, времени. Мы рассматриваем только секунды в UTC (он же Epoch). Ни при каких обстоятельствах локальное время не рассматривается, потому что ничего кроме хаоса его использование тут не вносит.
При просмотре передачи рекомендуется сохранять текущее время просмотра в базу данных middleware, чтобы при повторном открытии предлагать продолжить или начать сначала.
Когда пользователь выбирает передачу из архива, которая шла с 1717677139 UTC до 1717679255, надо сформировать для плеера урл: http://FLUSSONIC-IP/STREAM_NAME/archive-1717677139-2116.m3u8?event=true
В плеере будет работать:
- перемотка внутри передачи
- пауза
- ускоренный просмотр
При завершении проигрывания рекомендуется переключить на следующую передачу в EPG, чтобы сохранять непрерывность поступления контента в потребителя.
Просмотр текущей передачи с помощью event-плейлистов¶
Просмотр текущей передачи технологически будет сложнее. Мы предлагаем использовать event плейлисты, но они в нативном Сафари не позволяют отмотку назад, поэтому для ТВ не годятся и тогда вам нужно писать на яваскрипте и реализовывать собственный таймлайн. Если Сафари для вас не критичен, то смело используйте точно те же урлы, что и в epg-vod:
http://FLUSSONIC-IP/STREAM_NAME/archive-1717677139-2116.m3u8?event=true
Хитрость в том, что если момент закрытия плейлиста в будущем, то он будет отдаваться не как VOD, а как EVENT, что позволит плееру его перезапрашивать и двигаться дальше.
После закрытия этого плейлиста надо так же переключиться на следующий по EPG и продолжить просмотр.
Использование такого урла позволит поставить лайв на паузу и продолжить с того же места. Особенно важно отметить, что кнопку «live» необходимо программировать самостоятельно, потому что за время удержания на паузе плейлист может автоматически превратиться из EVENT в VOD и закрыться. В этом случае надо по EPG выяснить, какая передача следующая и перепрыгнуть на неё.
Pseudo-live DVR access¶
Самый ленивый и простой способ проиграть архив - это отправить плеер на псевдо-лайв из архива http://FLUSSONIC-IP:PORT/STREAM_NAME/timeshift_abs-1429829884.m3u8
.
Для такого запроса создается новая сессия, время создания которой запоминается на сервере. При последующем обращени начало этого плейлиста сдвигается и постоянно
отдаются несколько сегментов, симулируя лайв.
Плеер его проигрывает и показывает прямой эфир, который на самом деле является стримом из архива.
При постановке такого проигрывания на длительную паузу, сессия на сервере протухнет, удалится и после снятия с паузы проигрывание начнется с самого начала.
Мы не рекомендуем использование такого подхода кроме случаев, когда очень надо, очень быстро и не очень жалко клиента.