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.

No comments:

Post a Comment

If you face any specific issue or want to ask some question to our team,
PLEASE USE OUR HELPDESK

This will give much faster and precise response.
Thank you.

Note: Only a member of this blog may post a comment.