Upload
erica-beavers
View
2.739
Download
0
Embed Size (px)
Citation preview
ADAPTIVE BITRATE ALGORITHMS: HOW THEY WORK AND HOW TO OPTIMIZE YOUR STACK
Streaming Media East – Track DTuesday, May 10, 2016 1:45 to 2:30 pm
CLIENT-ACCELERATED STREAMING
Streamroot: Who are we?
PARTNERS
INFINITE POSSIBILITIES, LIMITLESS DELIVERY
Streamroot combines the best of a controlled, centralized network with the resilience and scalability of a widely
distributed delivery architecture.
Presentation Outline
I. Introduction: What are we trying to accomplish? Why does this matter?
II. The Basics of how ABR algorithms work: constraints & parameters, process
Example: hls.js
III. Possible improvements to basic ABR algorithms: smoothing, quantizing, scheduling
Example: dash.js
IV. Going furtherAnother Approach: buffer levelsThe key to improving: testing and iterating
I. Why ABR?
Multiplicity of network conditions and devices need to dynamically select resolution
HTTP / TCP stack removal from the transport protocol congestion logic client-level estimation & decisions
Source: FESTIVE diagram of HTTP streaming
I. Design Goals
1. Maximize efficiency – stream at the highest bitrate possible
2. Minimize rebuffering – avoid underrun and playback stalls
3. Encourage stability – switch only when necessary
(4. Promote fairness across network bottlenecks)
I. Why this Matters
Views 24 min longer when buffer ratio is < 0.2% for live content
View time drops 40% when > 0.4% buffer ratio mark
Buffer ratio vs. play time
Source: NPAW aggregated data for a set of European live broadcasters
II. The Basics: Constraints and Parameters
CONSTRAINTS TRADEOFF PARAMETERS
Screen size / Player size Buffer size
CPU & Dropped frame threshold Bandwidth & possible bitrate
Startup time / Rebuffering recovery (Bonus: P2P Bandwidth)
II. The Basics: Constraints
1. Screen & Player SizeBitrate should never be larger than the actual size of the video player
2. CPU & Dropped frame rateDowngrade when too many dropped frames per second
3. Startup timeAlways fetch the lowest quality first whenever the buffer is empty
II. The Basics: Tradeoff parameters
1. Maximize bitrate available bandwidth estimationEstimate the available bandwidth based on prior
segment(s)Available bandwidth = size of chunk / time taken to download
2. Minimize rebuffering ratio buffer sizeBuffer ratio = buffering time / (buffering time +
playback time)
Abandon strategySource: BOLA
Example: HLS.js
HTML5 (MSE-based) media engine open-sourced by Dailymotionhttps://github.com/dailymotion/hls.js
Very modular, so you can change the rules without even forking the media engine!
Example: HLS.js player size level cappinghttps://github.com/dailymotion/hls.js/blob/master/src/controller/cap-level-controller.js#L68
Checks the max CapLevel corresponding to current player size
Frequency: every 1000 ms
Example: HLS.js dropped frame rulehttps://github.com/dailymotion/hls.js/blob/master/src/controller/fps-controller.js#L33
Calculates the dropped frames per second ratio.
If > 0.2, bans the level forever goes into restricted capping levels
fpsDroppedMonitoringThresholdfpsDroppedMonitoringPeriod
Example: HLS.js startup strategyhttps://github.com/dailymotion/hls.js/blob/master/src/controller/stream-controller.js#L131
First segment is loaded from the first level in the playlist, then continues with normal ABR rule.
Example: HLS.js bandwidth-based ABR controllerhttps://github.com/dailymotion/hls.js/blob/master/src/controller/abr-controller.js
Simple algorithm,inspired by Android’s AVController’s ABR algo
Example: HLS.js P2P bandwidth estimation
Example: HLS.js bandwidth fragmentLoad abort rulehttps://github.com/dailymotion/hls.js/blob/master/src/controller/abr-controller.js#L51
STRONG POINTS COULD BE IMPROVED
Very simple and understandable Add history parameter to BW estimation and adjustment
Handles CPU & player size constraints Startup time constraint could be improved to get the lowest level first
Conservative BW adjustment to avoid oscillation
Sound emergency abort mechanism
Example: HLS.js sum-up
Simple algorithm with better performances in practice compared to native implementations.
1. Tweak the parametershttps://github.com/dailymotion/hls.js/blob/master/API.md#fine-tuning
Dropped FPS:
capLevelOnFPSDrop: false,fpsDroppedMonitoringPeriod: 5000,fpsDroppedMonitoringThreshold: 0.2
PlayerSize:
capLevelToPlayerSize: false,
2. Write your own rules!AbrController: AbrControllercapLevelController: CapLevelController,fpsController: fpsController
Example: HLS.js how to improve
III. Improvements: the pitfalls of bandwidth estimation
• Not resilient to sudden network fluctuations
• Often leads to bitrate oscillations
• Biased by HTTP/TCP calls on the same device/network
III. Improvements: better bandwidth estimation
A new 4-step approach:
1. Estimation2. Smoothing
3. Quantizing4. Scheduling
Source: Block diagram for PANDA
III. Improvements: estimation & smoothing
Estimation: take history into account!
Smoothing: Apply a smoothing function to the range of values obtained.
Possible functions: average, median, EMWA, harmonic mean
How many segments? 3? 10? 20?
III. Improvements: quantizing
Quantizing: quantize the smoothed bandwidth to a discrete bitrate
Additive increase multiplicative decrease conservative when switching
up, more aggressive when down.
Source: FESTIVE
III. Improvements: scheduling (bonus)
Continuous & periodic download scheduling oscillation, over- or underused resources
Randomize target buffer level to avoid startup bias and increase stability.
Also extremely useful for promoting fairness!
Source: FESTIVE
Example 2: DASH.JS
Dash.js is the reference DASH player developed by DASH-IF.https://github.com/Dash-Industry-Forum/dash.js/wiki
4 different rules:
2 Main:ThroughputRuleAbandonRequestsRule
2 secondary:BufferOccupancyRuleInsufficientBufferRule
Example 2: DASH.JS main rules
Source: DASH-IF, Maxdome
Example 2: DASH.JS, sum-up
STRONG POINTS COULD BE IMPROVED
Smoothes bandwidth No quantization of bitrates
Segment abort mechanism to avoid buffering during network drops
Doesn’t handle CPU & Player size constraints
Rich buffer threshold to avoid BW oscillations
Example 2: DASH.JS how to improve
1. Tweak the ParametersThroughputRule:
AVERAGE_THROUGHPUT_SAMPLE_AMOUNT_LIVE = 2;AVERAGE_THROUGHPUT_SAMPLE_AMOUNT_VOD = 3;
AbandonRequestRule:
GRACE_TIME_THRESHOLD = 500;ABANDON_MULTIPLIER = 1.5;
2. Write your own ruleshttps://github.com/Dash-Industry-Forum/dash.js/wiki/Migration-2.0#extending-dashjshttps://github.com/Dash-Industry-Forum/dash.js/blob/development/src/streaming/rules/abr/ABRRulesCollection.js
BufferOccupancyRule:
RICH_BUFFER_THRESHOLD = 20
Buffer size based ONLY no more bandwidth estimations
Uses utility theory to make decisions: configurable tradeoff between rebuffering potential & bitrate maximization:
Maximize Vn + y SnWhere:Vn is the bitrate utilitySn is the playback Smoothnessy is the tradeoff weight parameter
IV. Going further: DASH.js BOLA, another approach
IV. Going further: test and iterate!
Tweaking algorithms is easy, creating your forks too.
You’ve got the power!
- Know what is important to you (buffering, max bitrate, bandwidth savings…)
- Compare and cross with QoS analytics to understand your audiences
- Test and iterate: AB testing allows you to compare changes in real-time
Significant improvements without even changing your workflow!
QUESTIONS?
Further Reading / Contact Us
Probe and Adapt: Rate Adaptation for HTTP Video Streaming At Scale. Zhi Li, Xiaoqing Zhu, Josh Gahm, Rong Pan, Hao Hu, Ali C. Begen, Dave Oran, Cisco Systems, 7 Jul 2013.
Improving Fairness, Efficiency, and Stability in HTTP-based Adaptive Video Streaming with FESTIVE, Junchen Jiang, Carnegie Mellon University, Vyas Sekar, Stony Brook University, Hui Zhang, Carnegie Mellon, University/Conviva Inc. 2012.
ELASTIC: a Client-side Controller for Dynamic Adaptive Streaming over HTTP (DASH). Luca De Cicco, Member, IEEE, Vito Caldaralo, Vittorio Palmisano, and Saverio Mascolo, Senior Member, IEEE.
BOLA: Near-Optimal Bitrate Adaptation for Online Videos. Kevin Spiteri, Rahul Urgaonkar , Ramesh K. Sitaraman, University of Massachusetts Amherst, Amazon Inc., Akamai Technologies Inc.
Contact us at:
Nikolay Rodionov, Co-Founder and CPO, [email protected] Erica Beavers, Head of Partnerships, [email protected]