Hey all,
The topic of Adaptive Bitrate (ABR) Streaming has continued to come up in many conversations with companies and I wanted to share some of Bitmovin’s current capabilities on this and the steps to take to implement it for your Bitmovin Player instance.
ABR is vital for any streaming workflow (for those not familiar with it yet, check out this blog) as it is essential for providing a great experience across a range of streaming devices anywhere in the world, especially where connectivity is lacking. ABR is the technology designed to deal with this problem and is ultimately making a trade-off between QUALITY and STABILITY.
Consider these two extreme scenarios:
-
Video on Demand (VOD) streaming on Smart TV devices
Top priority: Video Quality
Low Priority: Buffer times
Other characteristics: Stable high bandwidth, large screen size -
Live streaming on Mobile devices
Top Priority: Stream stability
Low Priority: Video Quality
Other characteristics: Variable bandwidth, small screen size.
Bitmovin’s proprietary ABR logic is the most sophisticated on the market for optimising user experience, and in addition, Bitmovin allows developers to set preferences for how the ABR logic should behave in their Player, further optimising user experience in each specific use-case.
Below we will touch on the 3 most commonly-used properties in the Bitmovin Player config for customising ABR:
STARTUP BITRATE
Startup Bitrate defines what bitrate a user’s player instance should attempt to play first.
-
Low Startup Bitrate - Ideal use case: Live Mobile
- This scenario will reduce the initial buffer time in the first instance of playback regardless of measured bandwidth, at the expense of video quality.
-
High Startup Bitrate - Ideal use case: VOD Smart TV
- This scenario will increase the video quality in the first instance of playback, at the expense of startup time.
One of several properties can be used to define this:
- startupBitrate - the bitrate the Player should start playback with.
- maxStartupBitrate - The maximum bitrate the Player should start with (no effect if startupBitrate is used)
If none of the above are defined, the player will try to find the best startup bitrate automatically.
BITRATE LIMIT
Bitrate Limit defines an upper and lower boundary for requested video bitrate, and therefore a limit on highest and lowest quality.
-
A bigger range - Ideal use case: Live Mobile
- This scenario allows for more flexibility in video quality delivered by the ABR
-
A smaller range - Ideal use case: VOD Smart TV
- This scenario restricts the video quality delivered by the ABR.
The limits can be defined using the following properties:
- bitrate.maxSelectableVideoBitrate (default: infinity)
- bitrate.minSelectableVideoBitrate (default: 0)
BUFFER SIZE
Buffer Size defines the amount of video data kept in the buffer before and after the playback position.
-
A large buffer- Ideal use case: VOD Smart TV
- This scenario will improve seeking speed to nearby playback times and steady playback if bandwidth is fluctuating.
-
A small buffer - Ideal use case: Live Mobile
- This scenario reduces the amount of memory used on the device and will help the player react quicker to changes in bandwidth.
Two properties are used to define this:
- buffer.video.backwardduration (Default: 20s)
- buffer.video.forwardduration (Default: 40s)
The default Bitmovin Player buffer is 60 seconds, with 40s being loaded in advance. This means that live players would experience 40s delayed but stable playback.
SAMPLE PLAYER CONFIGURATION
Below is a sample for the Bitmovin Player config containing the properties discussed above.
{
key: 'USER_PLAYER_LICENSE_KEY',
playback: {
autoplay: false,
muted: false
},
adaptation: {
bitrates: {
maxSelectableVideoBitrate: "8.5mbps",
minSelectedVideoBitrate: 0,
},
startupBitrate: "4000kbps",
maxStartupBitrate: "7mbps", //ignored if startupBitrate defined
},
buffer: {
[MediaType.Video]: {
[BufferType.ForwardDuration]: 30,
[BufferType.BackwardDuration]: 20,
},
[MediaType.Audio]: {
[BufferType.ForwardDuration]: 50,
[BufferType.BackwardDuration]: 20,
},
},
}
These are just a few examples of ways to configure the Bitmovin ABR logic so please see the API reference for further information.
Happy Playin’