Работа с архивом DVR в Middleware¶
Эта статья должна помочь разработчику Middleware реализовать работу с архивом видео для реализации следующих задач пользователя:
- поставить прямой эфир на паузу, сходить покурить
- посмотреть текущую передачу с начала, потому что фильм понравился и надо сначала
- посмотреть вчерашнюю передачу
- отложить понравившуюся передачу в закладки, пересмотреть через пару месяцев
Проблема по которой существует эта статья заключается в том, что единственный протокол, который технически может решать эти проблемы - это RTSP, но от него давно отказались и перешли на сегментные HTTP: HLS, DASH (и немного MSS). Оба основных протокола для IPTV OTT не поддерживают эту функциональность из коробки и поэтому необходимы технологические исхищрения для решения этих задач.
Как же правильнее всего организовать доступ к архиву?
С помощью 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 выяснить, какая передача следующая и перепрыгнуть на неё.