Skip to content

Просмотр записи передач: перемотка, catch up TV, event-плейлисты

Flussonic Media Server поддерживает несколько способов перемотки трансляций и передач:

  • catch up TV,
  • event-плейлисты,
  • перемотка.

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

См. также:

Концепция архива

В большинстве MiddleWare запись передач устроена по принципу старого видеомагнитофона. В нужное время по расписанию включается запись, потом через некоторое время запись прекращается.

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

В Flussonic Media Server эта задача решена по-другому. Flussonic Media Server пишет всё видео в архив в собственном формате и предоставляет доступ к нему, как к бесконечной ленте. Каждый кадр имеет свой адрес — это его реальное время прихода в архив. Когда необходимо посмотреть архив, сообщите с какого времени и по какое надо отдать видео.

Flussonic Media Server умеет подстраиваться под разные варианты плееров и протоколов и предлагать архив в разном виде.

Реализация Catch-up TV в MiddleWare

Для того чтобы предоставить человеку доступ к уже записанной передаче, MiddleWare должна сформировать URL к архиву и отдать этот адрес плееру для проигрывания. Например, URL для HLS будет иметь вид http://FLUSSONIC-IP/STREAM_NAME/index-1429829884-3600.m3u8 или http://FLUSSONIC-IP/STREAM_NAME/archive-1429829884-3600.m3u8.

Время для URL надо брать из EPG, расписания передач, которое есть в каждой MiddleWare. Важно обратить внимание на то, что Flussonic Media Server требует указания времени в UTC, т.е. по Гринвичу.

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

Просмотр текущей передачи с помощью event-плейлистов

С передачей, которая ещё не закончилась, всё немного сложнее. Некоторые плееры, как то iOS, Android или StrobeMediaPlayback умеют работать с т.н. Event-плейлистами. Это такой способ предоставления контента, при котором плеер знает, что сервер сейчас показывает какое-то локальное во времени событие. При этом плеер предоставляет возможность как отмотать к началу, так и вернуться к прямому эфиру.

Event-плейлисты поддерживаются протоколами HLS, DASH, MSS. Например, для HLS будет URL вида: http://FLUSSONIC-IP/STREAM_NAME/index-1429829884-now.m3u8.

Будьте аккуратны, если вы запросите URL за сутки, то Flussonic Media Server отдаст огромного размера плейлист, который может полностью занять дорогой канал.

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

Перемотка и постановка на паузу

Для того чтобы получить плейлист с возможностью перемотки и постановки потока на паузу используется URL вида (для HLS): http://FLUSSONIC-IP:PORT/STREAM_NAME/rewind-7200.m3u8

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

Статус записи

Более продвинутая MiddleWare может уточнять у Flussonic Media Server, записана передача или нет. Для этого надо обратиться по HTTP API:

http://FLUSSONIC-IP/STREAM_NAME/recording_status.json?from=1429960179&to=1429963716

Поля from и to означают границы передачи.

В ответ придет JSON:

[{
  "stream":"STREAM_NAME",
  "ranges":[{"from":1429960179,"duration":3542}],
  "motion_log":[]
}]

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