April 25, 2018

fMP4 ABR HLS for VOD AVC and HEVC streaming in Nimble Streamer

Last year Apple announced their support for fragmented MP4, or fMP4, in HTTP Live Streaming protocol. This enables HLS carry the content without traditional MPEG-2 Transport Stream container, which allows reducing the traffic by removing MPEGTS overhead.
The traffic saving is more than 10%, with 15%-20% on average. The all-favorite Big Buck Bunny showed 13% saving on using fMP4 compared to MPEGTS.

Nimble Streamer already had fMP4 support for live streaming, now we introduce fragmented MP4 support for VOD HLS.

This container supports H.264/AVC and H.265/HEVC video, with AAC, MP3 and AC-3 audio.

Setup


The setup for Nimble Streamer VOD streaming routes is made the same way as before, you can read this article for all details. The only difference is in the playback URL. Instead of "playlist.m3u8" name you will use "playlist_fmp4.m3u8" like this:
http://127.0.0.1:8081/vod/sample.mp4/playlist_fmp4.m3u8
When accessing the stream using that type of URL, the content will be automatically re-packaged on-the-fly to provide it in fMP4 container and the playlist will be made using proper standard.

The same applies to ABR streaming with SMIL files. You can set up ABR VOD HLS using SMIL and then use "playlist_fmp4.m3u8" file name like this:
http://127.0.0.1:8081/vod/abr.smil/playlist_fmp4.m3u8
This URL will also generate proper playlist and chunklists.

Playlists


The fMP4-based playlist generated by Nimble Streamer will look as follows.

H.264/AVC playlist for fMP4:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",AUTOSELECT=YES,URI="audio.m3u8?nimblesessionid=3"
#EXT-X-STREAM-INF:BANDWIDTH=1016419,CODECS="avc1.66.30,mp4a.40.2",RESOLUTION=424x240,AUDIO="audio"
video.m3u8?nimblesessionid=3
H.265/HEVC playlist for fMP4:
#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="English",AUTOSELECT=YES,URI="audio.m3u8?nimblesessionid=4"
#EXT-X-STREAM-INF:BANDWIDTH=1284765,CODECS="hvc1.1.6.L93.80,mp4a.40.2",RESOLUTION=1280x720,AUDIO="audio"
video.m3u8?nimblesessionid=4

The chunks list will be made the same way.


All Nimble HLS fMP4 streams can be played in latest versions of Apple's operating systems as well as in ffplay and JWPlayer. If you know of any other players or platforms, please share your comment about it.

Troubleshooting


Nimble Streamer internal transmuxer buffer sometimes may not be enough to fit generated HLS chunk. This may lead to this error in Nimble Streamer logs:
[tmux1] E: buffer is too small to generate
By default the buffer is 40MB. You can increase it using "vod_transmuxing_buffer". Read Nimble Streamer configuration description for config setup details.


If you have any questions regarding this feature set, please contact our helpdesk.

Related documentation


fMP4 ABR HLS for live streaming, DVR for fMP4 ABR HLS in Nimble Streamer, Nimble Streamer, VOD streaming in Nimble StreamerABR VOD HLS using SMILMP3 and AAC to HLS transmuxing.

April 2, 2018

Live Transcoder wildcard scenarios

Live Transcoder for Nimble Streamer is a powerful tool for easy transformation of your live content. One of its most popular cases is creating multiple renditions from single input which is used for ABR live streaming setup like real-time SLDP ABR streaming.

To process multiple streams, you typically need to specify a new scenario for every transcoded stream, this means you need to have a set of decoders, filters and encoders for each.
Even though Live Transcoder has a very convenient and easy-to-use drag-n-drop UI, this may be annoying for setting up big amount of streams.

This is why we have wildcard capabilities in transcoding scenarios:

  1. You may specify just application name as a baseline for separating different types of scenarios.
  2. For each incoming stream in this application, its stream name will be taken as is and it will be used for output stream names.

Wildcard scenario setup


Let's take a look at a simple scenario where we have origin application which will have multiple streams. We'll make a scenario to downscale the resolution and have audio channel being passed through. Here's we have an empty new scenario.


Add new decoder - it will have applicaiton name, with stream name left blank.


Then we'll create an encoder with application called live. Instead of a stream name we'll put {STREAM} placeholder.



Then we'll add a scaling filter and also set up audio passthrough. That passthrough will have same settings for origin and result stream.


So now if you publish /origin/camera1 stream, it will be transcoded to a lower resolution, with output stream name as /live/camera1.

Wildcard wizard


This approach is used in one of the Transcoder wizards which is created to simplify the process of creating new scenarios. Being in transcoder scenarios main page, click on Transcoding wizard button and then select Adaptive bitrate streaming.



You'll be able to enter incoming Application name and then leave Stream name blank. Clicking next, you'll see a page which proposes to specify names and select respective renditions for downscaled streams.


You can also change the output stream name and then finish the editing. You'll get the following result scenario.



Using a wildcard approach you may create a flexible scenarios perfectly fit for your use cases.


If you have any questions regarding any functionality, just let us know.

Related documentation


Live Transcoder for Nimble StreamerNimble Transcoder YouTube playlistLive Streaming featuresABR live streaming setupAdding multiple audio tracks for ABR HLS

April 1, 2018

Softvelum 2018 Q1 news

First quarter of 2018 gave us several great features and updates.

Before reading further, check the State of Streaming Protocols for Q1 2018 - HLS is on the rise again, SLDP gains momentum, take a look.

Nimble Advertizer


Softvelum released a new premium functionality for Nimble Streamer called Nimble Advertizer. It's a server-side ads insertion framework based on Nimble Streamer.
It allows:

  • Pre-roll ads per each connection
  • Flexible timing for mid-roll ads
  • Per-stream ads insertion
  • Personalized ads
  • Customizable business logic

Those capabilities are supported for RTMP, SLDP and Icecast output protocols, having all other supported protocols for input.
Take a look at Advertizer website for read more details and download technical spec.

Nimble Streamer


Nimble Streamer brought some attention within the industry.

How to Create a Live HLS Feed With HEVC: a new highly detailed article by Jan Ozer explaining how to make fMP4 live streams with Nimble Streamer.
We've also released a blog post describing HEVC transcoding Amazon EC2 instances - which instance types will work best for you for that kind of transcoding.

Take a look at Reliable Low Latency Delivery with SRT+SLDP - an article in Haivision blog describing a combination of SRT and SLDP protocols for building reliable delivery networks.
Softvelum has also partnered with Haivision to provide a 10% discount for their SRT-enabled encoders, check this blog post for details.



We get questions regarding Nimble Streamer usage in high load use cases and scenarios.
Take a look at performance tuning guide for live streaming via Nimble Streamer.

For those who extensively uses SSL for their streaming use cases, check our support for multiple certificates and domains.

Mobile SDKs


Larix mobile SDK is being updated all the time to include new features and improvements.

Our streaming library now supports publishing via SRT in Push mode for both Android and iOS. This allows improving the publishing process within unreliable networks. Read more about SRT and its usage in Nimble Steamer and feel free to try SRT in action using Larix Broadcaster free app.

Mobile playback solutions now support Icecast playback widely used for online radios.
We've also improved our web player to handle fallback for iOS browsers by opening stremainf in SLDP player.

You may also check SDKs release notes for all latest updates and use this page to subscribe for SDKs and their support.


That's it. Stay tuned for more updates and follow us at Facebook and Twitter to get latest news and updates of our products and services.