June 23, 2014

Making ABR HLS from RTMP

WMSPanel team recently introduced RTMP-to-HLS transmuxing and one of the features of this transmuxing is the ability to "construct" adaptive bitrate streams from single-bitrate streams.

Nimble Streamer and WMSPanel give a combination of speed, flexibility and simplicity. Let's take a closer look on how they can handle ABR HLS in the best way and how you can benefit from these products. 

Here's a brief overview picture of HLS processing.

Nimble takes incoming RTMP stream which has several bitrate streams, then creates outgoing streams which may be used for ABR streaming. This is done is semi-automatic way.

Easy RTMP and HLS streams description

Most of ABR-related operations do not require efforts from admin side. For example, once you've defined RTMP application and your RTMP publisher starts pushing streams, you will see them in the Incoming streams page. As shown below, you see their original name and bandwidth.

View published RTMP streams' details.

Now if you go to Outgoing streams page you see all available details for each stream including codec information, bandwidth and resolution.

No need to enter any parameters manually, they are already here, available for further usage. Take a look at the screenshot below.

Browse HLS single-bitrate streams for published RTMP.

As you notice, you may use single-bitrate streams any moment, just click on URL for Player. And also use them for further ABR processing.

Easy ABR HLS streams definition

Now with these easily defined single-bitrate streams you can do the most interesting part.
Adaptive bitrate streams are constructed via simple wizard where you just select which streams to use for your new ABR stream.

Choose Adaptive stream page link and click on Add ABR stream from RTMP sources. To see the dialog below.

Define ABR HLS stream from single-bitrate HLS streams.

Here you will be able to specify:

  • ABR application and stream which your viewers will use for accessing ABR stream
  • Source applications and streams which will be used for streams inside of ABR playlist. You can add several sources by clicking on corresponding link.
  • Streams sorting in HLS playlist:
    • Manual - as defined in list;
    • By bandwidth - descending;
    • By bandwidth - ascending.
  • Servers to apply ABR settings to - selecting multiple servers allows creating new stream on any number of Nimble Streamer instances.

Browse available ABR HLS streams.

Now when the ABR stream is described you may pick up URL from URL for player dialog and give it to your media player. This URL will point to a playlist which includes sub-playlists for streams you previously selected.

Graceful adaptive bitrate

When the player starts the playback from ABR playlist it may select the stream which is most preferred for your current bandwidth. When the network capability changes, new chunks are started to pick up from the proper sub-playlist. The main playlist is continuously requested again to make sure it has latest changes.

During the playback, the RTMP streams' source may loose some of its incoming streams due to many reasons. A camera may shut down, a failure may appear within the encoder itself or some network may be unavailable for transmission. So one or more incoming streams may become unavailable for ABR streaming.

Nimble Streamer provides graceful handling of cases like that. When respective RTMP stream goes down, it is excluded from outgoing streams list, thus it's excluded from the ABR playlist. So when new player gets playlist the broken stream will not be there.

This behavior means that an end-user will have good user experience with no playback interruption.

When a broken stream gets back online, a player receives its description and starts using it in its workflow.

Speed, flexibility and simplicity

We also recommend using our Live Transcoder for content transformation activities. It has performance equivalent to FFmpeg while having flexible web UI.
Having the workflow described above, Nimble Streamer and WMSPanel provide solid solution for ABR HLS streaming produced from RTMP streams. This solution gives the setup flexibility and simplicity along with excellent streaming performance. Also keep in mind that you can use Nimble for further re-streaming hence building robust full-scale delivery chain. Another option is to set RTMP republishing via Nimble Streamer so you can get published RTMP and then push it further into your streaming network.

You may also consider using Nimble to pull RTMP for further HLS transmuxing to simplify some transmuxing scenarios. Also, you may use RTMP streaming as a fallback for HLS using RTMP playback in Nimble. You may also consider using streaming API to control ABR and RTMP behavior remotely.

If you think there should be some changes in some RTMP-related scenarios, just let us know about it. Describe your use case and we'll provide the best way to use Nimble Streamer to build your streaming solution.

Related documentation

No comments:

Post a Comment