October 28, 2015

Video recording (DVR) in Nimble Streamer

Streams recording is one of the essential use cases for live streaming. It's important to be able to view stream after the transmission is over, or switch between parts of the show during the transmission.

Nimble Streamer has an excellent capabilities for handling live streams and transmuxing them from RTSP, RTMP, MPEG-TS, Icecast and SHOUTcast to any supported format like HLS, MPEG-DASH, RTMP, RTSP and MPEG-TS. So the next step we always wanted to make is to create streams recording, also known as Digital Video Recording, or DVR.

Nimble Streamer DVR current features:
  • recording the incoming streams;
  • per-application and per-stream settings;
  • playback of previously recorded streams;
  • time range selection - for EPGs etc.;
  • time-shifted playback;
  • playback of streams being recorded at the moment;
  • current output protocols are HLS and MPEG-DASH;
Let's see how you can start using this in your environment.


1. Streaming scenarios setup


This article assumes that you've already installed Nimble Streamer. If not, then use this installation instruction to get an instance on your server or desktop. If you have old version of Nimble, then just easily upgrade it.

Check the following articles as examples of setup:

With all these scenarios being up and running you can start setting up DVR.

2. DVR setup


Go to "Nimble Streamer" -> "Live streams settings" menu to open the setup page. Then click on "DVR" tab to open its settings.

DVR settings tab
Here you can see list of setting. In our example we've set up something, otherwise you would see an empty list. Click on "Add DVR setting" button to start the setup.

DVR setup dialog
Here are the parameters you can define.

  • Application is the name of the application which is used during the live streaming. Whatever application name you use in live stream, it must be specified here. 
  • Stream name can be used to recording of some specific stream. If it's not specified, all streams will be recorded, each one separately within recording path. 
  • Recording path is the location of the storage which you'd like to use. It needs to be a file system location. If you don't specify it, the default cache path of Nimble Streamer will be used. 
  • Loop recording duration is the maximum time window that keeps the content. E.g. if you set this to 1 hour, start streaming and your stream lasts for 1 hour and 10 minutes, then first 10 minutes of recording will be erased to keep the last 10 minutes. This duration mostly depends on your storage capacity. If you don't specify the duration then Nimble will keep recording until it has space at the specified location.
  • Maximum size works the same way as Loop recording duration, but it uses archive size as a trigger to start erasing old recordings. It's specified in megabytes.
  • Read-only mode allows using pre-recorded archives as well as performing scheduled recording. This mode allows pausing the recording process while the archive will be still accessible for playback. Read this article for more details on operating DVR this way.

Advanced settings include the following parameters. We'll release a separate article describing advanced recording tuning process.
  • Segment duration is the duration of the chunk being used for media storage. 
  • Thread name and priority are used for splitting recording process among several threads. 
In the example above we used Larix Broadcaster mobile application to push RTSP stream into demo Nimble instance and we've set up its recording accordingly. We specified only the application name because it was up to the streamer to define a stream name.

Adding from streams list

You may also easily set up recording from existing incoming and outgoing streams lists. Being in the respective lists, just click on recording button to be redirected to previously described DVR setup dialog.


ABR streams

The ABR streams recording is set up in the same way as single-bitrate streams. When setting up DVR, you need to specify ABR application and optionally stream name to define DVR recording. Then you'll be able to play recorded stream the same way as a single-bitrate one.

For playback details, check the following section.

3. DVR recording and playback


The recording process starts as soon as Nimble Streamer starts getting the incoming stream. Each stream is recorded into its own recording path. If only an application is defined then a sub-directory after stream name will be added. If the stream was specified then its path will be used.

Each recording session will be appended into stream location. So you can start, stop and resume incoming stream several times and Nimble Streamer will write the content as if it would be a single session. Obviously, the playback will be played as a single outgoing stream.

To view the existing DVR streams, go to "Nimble Streamer" -> "DVR streams" menu to open DVR streams list as shown below.

List of DVR streams.

As you can see we had 2 publishers, each having separate stream name. So every stream was recorded separately. For each one you can see its server and name, recording path and current recording size, total duration and some media parameters. You also have an option to remove un-used streams recordings as well.

Now for every stream, you can click on a question mark to open sample dialog.

DVR sample playback.
Here you can copy the outgoing DVR stream URL for further usage in your player or application. It also allows viewing the DVR stream in selected players to see what was actually recorded before giving the link outside.

Basically if you have a live stream name like
http://yourhost/live/stream/playlist.m3u8
then your DVR stream URL will be
http://yourhost/live/stream/playlist_dvr.m3u8
ABR live streams work the same way. For ABR stream name like
http://yourhost/live_abr/stream/playlist.m3u8
the DVR stream URL will be
http://yourhost/live_abr/stream/playlist_dvr.m3u8
You may use it in any HLS-capable players.

The same applies to MPEG-DASH. Your stream like
http://yourhost/live/stream/manifest.mpd
will be available as
http://yourhost/live/stream/manifest_dvr.mpd


Please notice that you may also control DVR via API in order to automate your streaming infrastructure.

If you'd like to export DVR into MP4, you can check this instruction.


Related documentation


9 comments:

  1. Great feature, well done gentlemen.

    ReplyDelete
    Replies
    1. Thanks, Behnam! Looking forward to your feedback.

      Delete
  2. Replies
    1. Thanks! Feel free to sign up and try it in action.

      Delete
  3. Can I bypass Wowza DVR and use Nimble DVR? I am also streaming multiple bitrates from Wowza, Any impact?

    ReplyDelete
    Replies
    1. We'll release ABR support this week and you will be able to use DVR with multiple bitrate streams.

      Delete
  4. This comment has been removed by the author.

    ReplyDelete
  5. Very nice! A-1 work!
    It would be greeeeaaaat,
    1) if we could start and stop recording via API (e.g. based on EPG)
    2) if we could grab a list of existing recordings via API

    ReplyDelete
    Replies
    1. Thank you for the feedback!
      We've just introduced API for DVR: https://wmspanel.com/api_info We'll announce it very soon, please stay tuned for updates.

      Delete