Skip to content
Kevin Spiteri edited this page Aug 10, 2017 · 8 revisions

BOLA is an ABR algorithm that determines bitrate from buffer occupancy. As the buffer occupancy grows, higher-bitrate segments are preferred. As the buffer occupancy drops, lower-bitrate segments are preferred. More details behind the idea can be found at https://arxiv.org/abs/1601.06748.

BolaRule implements the BOLA algorithm within the dash.js framework. It has to make allowances for the fact that it is not the only rule controlling the buffer. For example, DroppedFramesRule bans bitrates which cause the video player to drop frames, probably because of CPU limitations. Also, situations such as live streaming limit how much the buffer can grow. As such, BolaRule needs to keep track of changes in the buffer level beyond its control. It keeps a placeholder buffer level which compensates for buffer depletion beyond BolaRule's control. However, the placeholder buffer does not have real video content, so it serves little to protect against rebuffering. BolaRule relies on InsufficientBufferRule to solve this problem - if the placeholder buffer leads BolaRule to make an optimistic bitrate choice which would lead to rebuffering, InsufficientBufferRule still limits the bitrate choice to some safe level.

BolaRule can be activated using MediaPlayer.enableBufferOccupancyABR(true). Otherwise the ABR decisions are mainly controlled by ThroughputRule.

Coming soon: Since BolaRule is stronger when sufficient buffer levels can be maintained and ThroughputRule is stronger during transient conditions, it is desirable to combine the best of both rules. The PR #2083 attempts to get this balance, using ThroughputRule for startup and low-buffer conditions and using BolaRule for high-buffer conditions. The PR also replaces MediaPlayer.enableBufferOccupancyABR() with MediaPlayer.setABRStrategy(strategy) where strategy can be 'abrDynamic' (default) or one of 'abrBola' and 'abrThroughput' to choose one rule disabling the other.

Clone this wiki locally