Reconstructing proprietary video streaming algorithms Maximilian Grüner , Melissa Licciardello, Ankit Singla Photo: ETH Zürich / Gian Marco Castelberg
Roadmap 2
Roadmap •Introduction 2
Roadmap •Introduction •Reconstruction 2
Roadmap •Introduction •Reconstruction •Experiments 2
Roadmap •Introduction •Reconstruction •Experiments •Limitations and future work 2
Roadmap •Introduction •Reconstruction •Experiments •Limitations and future work •Takeaways 2
Streaming in Industry Share of global internet traffic % Categories [Sandvine 2019] 3
Streaming in Industry Share of global internet traffic % Categories [Sandvine 2019] 3
Streaming in Industry 23.8 % Various, 23.1 % Netflix, 12.7 % YouTube, 4.2 % Twitch… Share of global internet traffic % Categories [Sandvine 2019] 3
Streaming in academia # Google Scholar citations Year 4
Streaming in academia # Google Scholar citations Year 4
Applications of reconstruction 5
Applications of reconstruction 5
Applications of reconstruction 5
Applications of reconstruction 5
6
6
6
6
6
Introduction into ABRs Played [Video from YouTube] Resolution Throughput 7
Introduction into ABRs Played [Video from YouTube] Resolution Throughput 7
Introduction into ABRs Played [Video from YouTube] Resolution Throughput 7
Introduction into ABRs Played [Video from YouTube] Resolution Throughput 7
Introduction into ABRs Played [Video from YouTube] Resolution Throughput 7
Introduction into ABRs Played [Video from YouTube] Resolution Throughput 7
Simple ABR in code def choose_next_quality(throughput_history): throughput_estimate = throughput_history[-1] if throughput_estimate == low: next_quality = ⬇⬇ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 8
Simple ABR in code def choose_next_quality(throughput_history): throughput_estimate = throughput_history[-1] if throughput_estimate == low: next_quality = ⬇⬇ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 8
Simple ABR in code def choose_next_quality(throughput_history): throughput_estimate = throughput_history[-1] if throughput_estimate == low: next_quality = ⬇⬇ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 8
Simple ABR in code def choose_next_quality(throughput_history): throughput_estimate = throughput_history[-1] if throughput_estimate == low: next_quality = ⬇⬇ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 8
Simple ABR in code def choose_next_quality(throughput_history): throughput_estimate = throughput_history[-1] if throughput_estimate == low: next_quality = ⬇⬇ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 8
Simple ABR as a tree throughput_estimate == low False True next_quality = ⬇⬇ next_quality = ⬆⬆ 9
(Slightly more) complex ABR in code def choose_next_quality(throughput_history): throughput_estimate = np.mean(throughput_history[-2:]) if throughput_estimate == low: next_quality = ⬇⬇ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 10
(Slightly more) complex ABR in code def choose_next_quality(throughput_history): throughput_estimate = np.mean(throughput_history[-2:]) if throughput_estimate == low: next_quality = ⬇⬇ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 10
Why do we need primitives 11
Why do we need primitives 11
Why do we need primitives 2 Rules 11
Why do we need primitives 5 Rules 11
Why do we need primitives 25 Rules 11
Why do we need primitives 100 Rules 11
Complex ABR in code def choose_next_quality(throughput_history, buffer_size): throughput_estimate = np.mean(throughput_history[-2:]) if throughput_estimate == low: download_time = chunk_size_high / throughput_estimate if download_time < buffer_size: next_quality = ⬇⬇ else : next_quality = ⬆⬆ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 12
Complex ABR in code def choose_next_quality(throughput_history, buffer_size): throughput_estimate = np.mean(throughput_history[-2:]) if throughput_estimate == low: download_time = chunk_size_high / throughput_estimate if download_time < buffer_size: next_quality = ⬇⬇ else : next_quality = ⬆⬆ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 12
Complex ABR in code def choose_next_quality(throughput_history, buffer_size): throughput_estimate = np.mean(throughput_history[-2:]) if throughput_estimate == low: download_time = chunk_size_high / throughput_estimate if download_time < buffer_size: next_quality = ⬇⬇ else : next_quality = ⬆⬆ else : ## throughput_estimate == high next_quality = ⬆⬆ return next_quality 12
Number of primitives 13
Number of primitives Features 13
Number of primitives Features X Lookback 13
Number of primitives Features X Lookback X Actions 13
Number of primitives Features X Lookback X Actions ~ 1300 Primitives 13
14
14
Services of interest Provider Description Alexa Rank 15
Services of interest Provider Description Alexa Rank YouTube Broad coverage 2, Global 15
Services of interest Provider Description Alexa Rank YouTube Broad coverage 2, Global ZDF German Public Service 47, Germany 15
Services of interest Provider Description Alexa Rank YouTube Broad coverage 2, Global ZDF German Public Service 47, Germany Pornhub Pornographic video sharing website 46, Global 15
Services of interest Provider Description Alexa Rank Provider Description Alexa Rank YouTube Broad coverage 2, Global YouTube Broad coverage 2, Global ZDF German Public Service 47, Germany ZDF German Public Service 47, Germany Pornhub Pornographic video sharing website 46, Global Pornhub Pornographic video sharing website 46, Global Arte French-German,cultural 270,France Fandom Gaming, pop-culture 91, Global SRF Swiss Public Service 45, Switzerland TubiTV Movies and series of all genres 1330, USA Twitch Live and VoD streaming service, gaming 39, Global Vimeo Artistic content 188, Global XVideos Pornographic video sharing website 67, Global 15
Inference features 16
Inference features Providers 16
Inference features Providers X Net-traces 16
Inference features Providers X Net-traces X Videos 16
Inference features Providers X Net-traces X Videos X Length 16
Inference features Providers X Net-traces X Videos X Length ~ 9 hours of training/testing streaming time 16
17
17
Why is agreement not sufficient 18
Why is agreement not sufficient Played [Video from YouTube] Resolution Throughput 18
Why is agreement not sufficient Played [Video from YouTube] Resolution Throughput 18
Why is agreement not sufficient Played [Video from YouTube] Resolution Throughput 18
Why is agreement not sufficient Played [Video from YouTube] Resolution Throughput 18
Why is agreement not sufficient Played [Video from YouTube] Resolution Throughput 18
Agreement 19
Agreement [Wikipedia] 19
Agreement [Wikipedia] 19
Agreement [Wikipedia] 19
Agreement [Wikipedia] 19
Agreement [Wikipedia] 19
Agreement [Wikipedia] 19
Agreement [Wikipedia] 19
Agreement F 1 = 2 ⋅ precision ⋅ recall precision + recall [Wikipedia] 19
Similarity 20
Similarity [Scikit-learn] 20
Similarity [Scikit-learn] 20
Similarity [Scikit-learn] 20
Similarity [Scikit-learn] 20
Similarity Score Similarity = 𝒬 ( Decision from reference distribution ) [Scikit-learn] 20
General metric analysis 21
General metric analysis 21
General metric analysis Best 21
General metric analysis Best Worst 21
General metric analysis Best Worst 21
General metric analysis Best Worst 21
General metric analysis Best Worst 21
General metric analysis Best Worst 21
General metric analysis Best Worst 21
22
22
22
22
22
Perceptual metric analysis 23
Recommend
More recommend