Here are some of the options that I am aware of for packaging content as Adobe HDS. They are all commercial software. 1. Adobe Media Server and the f4fpackager tool 2. Wowza Media Server 3. Unifed Streaming Server 4. Nginx HDS module The specification for the manifest format from Adobe is here: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/hds/pdfs/adobe-media-manifest-specification.pdf And the specification for HDS fragments and complete setup is here: http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/hds/pdfs/adobe-hds-specification.pdf Other information: PHP Script that can join f4f/f4m: https://github.com/K-S-V/Scripts Note that it also appears there is a ts2hds function in gpac that requires further investigation as it doesn’t appear to be built by default. https://github.com/maki-rxrz/gpac
An interesting debate arose recently about whether CBR or VBR should be used when encoding for adaptive streaming. The debate started with my comment that adaptive streaming should use CBR as it better allows the client to manage what bandwidth it is receiving, the issue being VBR that if the client is receiving what it thinks is a 3Mbps stream that due to scene complexity then spikes say up to 6Mbps to deal with the extra complexity this would cause the clients buffers to fill a lot slower than expected for the bitrate and then down shift.
There are a few factors at play here in that need to be considered, these are:
- Real world bandwidth in a consumer environment available to a device can vary quite a lot
- Video encoding can demand varying amounts of bits to represent an image at a constant quality
- Encoding at a constant bit rate may produce video overhead from “stuffing” bits that unneccesarily consume storage and bandwidth
In relation to item 1. if we take a normal home environment not only the providers upstream available bandwidth may vary due to congestion but other in home factors come in to play such as competition for limited bandwidth from multiple downloaded to variations in single strength over wifi.
In relation to item 2. the amount of bits to encode 2 seconds of black vs a high action CGI scene with a lot of colours or rippling water is significant.
This post is a work in progress but if anyone is interested leave me a note and I will follow up.
Note that the Apple encoding recommendations for HLS which are widely cited refer to a maximum VBR rate of 10% over the target rate.
Android Java based adaptive streaming client
Adaptive Video Streaming over HTTP with Dynamic Resource Estimation
nginx is one of the best web servers out there not only because it is massively scalable but also because it has a nice clean configuration syntax.
The nginx-rtmp module looks like a very impressive add on that provides some really nice additional features for video streaming, including:
- Ability to re-stream rtmp
- Push rtmp to other locations
- Ability to record streams
- Ability to perform on the fly transcodes of content coming through
Quite often it is useful to put up a test stream or source with a new CDN configuration for testing purposes, this works with authenticated rtmp which is required when connected to Akamai or many Adobe/Flash Media Server servers.
ffmpeg -re -f lavfi -i testsrc=size=1920x1080 -c:v libx264 -b:v 500k -an -s 1920x1080 -x264opts keyint=50 -g 25 -pix_fmt yuv420p -f flv rtmp://<USERNAME>:<PASSWORD>@p.<CPCODE>.i.akamaientrypoint.net/EntryPoint/mystream_1_500@<STREAMID>
You need to get the username, password, entrypoint name and streamid from your Akamai account (Configure -> Live Media)
You can then play it back using the URLs you also see in your Akamai control panel.
Note that for the RTMP to be converted to HLS or HDS you need to make sure you have frequent enough keyframes which is what the keyint directive is for.
Abstract—Netﬂix is the leading provider of on-demand Internet
video streaming in the US and Canada, accounting for 29.7%
of the peak downstream trafﬁc in US. Understanding the Netﬂix
architecture and its performance can shed light on how to best
optimize its design as well as on the design of similar on-demand
streaming services. In this paper, we perform a measurement
study of Netﬂix to uncover its architecture and service strategy.
We ﬁnd that Netﬂix employs a blend of data centers and Content
Delivery Networks (CDNs) for content distribution. We also
perform active measurements of the three CDNs employed by
Netﬂix to quantify the video delivery bandwidth available to
users across the US. Finally, as improvements to Netﬂix’s current
CDN assignment strategy, we propose a measurement-based
adaptive CDN selection strategy and a multiple-CDN-based video
delivery strategy, and demonstrate their potentials in signiﬁcantly
increasing user’s average bandwidth.