Skip to content

Как сделать отложенный просмотр в другом часовом поясе

Многие телеканалы вещаются с рассчётом только на один часовой пояс и если мы говорим про Россию, то зачастую это только московский часовой пояс.

Если хочется этот же канал отдавать пользователям в Германии или в США, то возникает неудобство: на часах у людей ещё раннее утро, а в телевизоре уже вечерние передачи.

Flussonic Media Server может отложить проигрывание потока на несколько часов, чтобы у людей в другом часовом поясе передача «Доброе утро» шла добрым утром, а не глубокой ночью.

Есть несколько технических способов организовать это в Flussonic Media Server исходя из частоты обращения к различным каналам в различных часовых поясах. Разница между способами заключается в том, сколько раз будет читать архив для отложенного показа канала. Можно запустить отложенный поток и тогда архив будет читаться один раз вне зависимости от количества желающих посмотреть, а можно отдать пользователям персональные URL-адраса и тогда архив будет читаться на каждого пользователя.

Если каналов пишется порядка 250 и хочется сделать вещание для 3-х локаций, то суммарно получается 250 каналов на запись и 750 на чтение. Некоторые каналы имеет смысл сделать постоянно запущенными, а некоторые только по запросу пользователей.

Отложенный поток

Пусть у нас есть настроенный канал:

stream channel {
  input fake://fake;
  dvr /storage 1d;
}

У канала должен быть настроен архив (в примере это dvr /storage 1d).
Теперь можно сделать второй поток:

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

Этот поток будет вычитывать из архива и показывать то, что было один час назад (3600 секунд).

Таких потоков можно создавать столько, сколько нужно.

Flussonic DVR Timeshift

Персональный доступ к архиву

Если есть настроенный поток:

stream example_stream {
  input udp://239.1.2.3:1234;
  dvr /storage 1d;
}

то к нему можно выдать URL:

  • для проигрывания по HTTP MPEG-TS:
http://FLUSSONIC-IP/example_stream/timeshift_rel/3600

для проигрывания по HLS:

http://FLUSSONIC-IP/example_stream/timeshift_rel-3600.m3u8

Для мультиязыковых каналов можно отдать следующий URL на приставки:

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

Пропуск «дырок» в архиве

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

Если же допустимо нарушить временной сдвиг (таймшифт) и перепрыгнуть через эту «дырку», то следует запрашивать плейлист с параметром ?ignore_gaps=true:

https://FLUSSONIC-IP/STREAM_NAME/timeshift_abs-123123123.m3u8?ignore_gaps=true

С timeshift_abs HLS URL-адресами есть большая сложность, связанная с природой HLS протокола. Дело в том, что Flussonic Media Server может лишь вероятностно связывать отдельные HTTP запросы в одну сессию. Flussonic Media Server считает, что сессия та же, если у двух запросов совпадает IP адрес клиента, имя канала, протокол запроса и токен. В случае с несколькими, идущими подряд timeshift abs запросами, Flussonic Media Server решит, что это одна и та же сессии. В итоге может получиться искажение просмотра. Чтобы избежать этого, следует передавать в timeshift_abs запрос новый токен.

Вариант попроще — запросить HTTP MPEGTS http://FLUSSONIC-IP/STREAM_NAME/timeshift_abs-1429829884.ts.

Однако HTTP MPEGTS вариант лишает доступа к мультибитрейту.