Skip to content

Viewing recorded broadcasts: Rewind, catch up TV, event playlists

Flussonic Media Server supports several ways of rewinding translations and broadcasts:

  • catch up TV
  • event playlists
  • rewind

The way you use depends on wether it is supported by Middleware and protocol. This article will explain how to make use of all capabilities of the archive in the middleware or client player.

See also:

  • Streaming API to learn all the ways of viewing DVR via any supported protocol.

The concept of the archive

In most middleware recording of broadcasts is arranged according to the principle of the old good VCR. At the required time according to the schedule, recording starts, then it stops after a while.

Such an approach features many problems, and the main problem is the fact that the schedule is usually inaccurate, i.e., the beginning of a recording will contain the "tail" of the previous broadcast, and the final part of the needed broadcast is omitted. Attempts are made to solve this problem by expanding the time-frame of the broadcast recording, which results in creating overlapping recordings on the disk.

In Flussonic, we found a different solution. Flussonic writes all videos to the archive in its proprietary format, and provides access to it, as if it were an endless tape. Each frame has its own address — its real time of population in the archive. When one wishes to view the archive, you need to tell in what time frame the video is required.

Flussonic is able to adapt to various players and protocols and present the archive in a various forms.

Catch-up TV implementation in middleware

In order to provide access to an already recorded broadcast, the middleware should form the URL to the archive and send this URL to the player for playing back. The URL for HLS will look like http://FLUSSONIC-IP/STREAM_NAME/index-1429829884-3600.m3u8 or http://FLUSSONIC-IP/STREAM_NAME/archive-1429829884-3600.m3u8.

The time for the URL should be taken from the EPG or the broadcast schedule that can be found in each middleware. It is important to pay attention to the fact that Flussonic requires time to be specified in UTC, i.e. GMT.

The player will receive the URL, understand that it is a file and show standard controls for playback. The broadcast playback can be easily rewound, paused and continued.

Viewing current broadcast with event playlists

Everything becomes more complicated with unfinished broadcasts. Some players, such as iOS, Android or StrobeMediaPlayback are able to work with the so-called Event playlists. This is a way of providing content where the player knows that the server is now displaying some local event. With that, the player provides the possibility to rewind to the start, and to return to live broadcasting.

Event playlists are supported by HLS, DASH, and MSS. For example, an HLS URL would look like http://FLUSSONIC-IP/STREAM_NAME/index-1429829884-now.m3u8

Be careful, if you request an URL for 24 hours, Flussonic will return a huge playlist which can overload an expensive Internet channel.

However, such an URL may not work for many set-top boxes, since the set-top box will only show live broadcast without the possibility to rewind. For such devices, a JS code should be written, which would catch rewinding, and send the client to another URL with a timeshift, see Timeshift to Another Time Zone.

Rewinding and pausing streams

Use the following URL (for HLS)to get a playlist allowing the stream rewinding or pausing: http://FLUSSONIC-IP:PORT/STREAM_NAME/rewind-7200.m3u8

A very important point with pausing is the fact that pausing a stream is a very complicated operation which is not available in all protocols. It is much easier to pause file playback so the Catchup option is more common.

Record status

A more advanced middleware can check with Flussonic whether the broadcast has been recorded or not. To do so, the request should be sent via HTTP API:

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

The "from" and "to" fields define the limits of the broadcast.

JSON similar to the following will be returned:

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

The ranges field contains an array of objects that signify the areas of continuous recording. If there are gaps in the recording, the array will contain more than one object. If no recording was made during the specified time interval, the array will be empty.