├── .gitignore ├── ABRPolicies ├── ABRPolicy.py ├── ComplexABRPolicy.py ├── OptimalABRPolicy.py ├── PensieveMultiVideo │ ├── __init__.py │ ├── env.py │ ├── generate_test_video.py │ ├── generate_video.py │ ├── models │ │ ├── nn_model_ep_96000.ckpt.data-00000-of-00001 │ │ ├── nn_model_ep_96000.ckpt.index │ │ └── nn_model_ep_96000.ckpt.meta │ ├── multi_a3c.py │ ├── multi_agent.py │ ├── rl_test.py │ ├── rl_test_all.py │ ├── training_scrip.py │ └── training_script_notebook.ipynb ├── PensieveSingleVideo │ ├── __init__.py │ └── single_a3c.py ├── SimpleABRPolicy.py ├── ThroughputEstimator.py └── __init__.py ├── BehaviourCloning ├── ActionCloning.py ├── GeneticFeatureEngineering.py ├── ImitationLearning.py ├── MLABRPolicy.py ├── RewardShapingCloning.py └── __init__.py ├── DashExperiments ├── Makefile ├── dash_abr_test.py ├── make_plot.py ├── make_testcase.py ├── server_conf │ └── config.json └── src │ ├── chromedriver │ ├── http │ ├── http_traffic.py │ └── web-traffic-generator │ │ ├── .gitignore │ │ ├── LICENSE │ │ ├── README.md │ │ ├── client.py │ │ ├── cnn.html │ │ ├── config.py.template │ │ ├── ebay.html │ │ ├── gen.py │ │ ├── google.html │ │ ├── http_traffic_server.py │ │ ├── wikipedia.html │ │ ├── yahoo.html │ │ └── youtube.html │ ├── run_browser_test.py │ ├── udp_video_transfer │ ├── proxy_server.py │ ├── video_server.py │ └── video_server_limit.py │ ├── utils │ └── release.sh │ └── video_server │ ├── BB_server.py │ ├── BOLA_server.py │ ├── RB_server.py │ ├── RL_server.py │ ├── a3c.py │ ├── models │ ├── pretrain_linear_reward.ckpt │ ├── pretrain_linear_reward.ckpt.data-00000-of-00001 │ └── pretrain_linear_reward.ckpt.index │ ├── results │ ├── pretrain_linear_reward.ckpt.data-00000-of-00001 │ ├── pretrain_linear_reward.ckpt.index │ └── pretrain_linear_reward.ckpt.meta │ ├── trees │ └── zdf_tree │ │ └── classifier │ └── zdf_tree_server.py ├── Experiments ├── SampleExperiment.py └── __init__.py ├── LICENSE.md ├── README.md ├── SimulationEnviroment ├── Rewards.py ├── SimulatorEnviroment.py └── __init__.py ├── Transformer ├── LegacyTransformer.py ├── __init__.py ├── reference_creation_script.py └── sample_creation_script.py ├── Utility ├── __init__.py └── tree_mapper.py └── requirements.txt /.gitignore: -------------------------------------------------------------------------------- 1 | Data 2 | cleaning_up_notebooks -------------------------------------------------------------------------------- /ABRPolicies/ABRPolicy.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/ABRPolicy.py -------------------------------------------------------------------------------- /ABRPolicies/ComplexABRPolicy.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/ComplexABRPolicy.py -------------------------------------------------------------------------------- /ABRPolicies/OptimalABRPolicy.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/OptimalABRPolicy.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/env.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/env.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/generate_test_video.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/generate_test_video.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/generate_video.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/generate_video.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/models/nn_model_ep_96000.ckpt.data-00000-of-00001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/models/nn_model_ep_96000.ckpt.data-00000-of-00001 -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/models/nn_model_ep_96000.ckpt.index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/models/nn_model_ep_96000.ckpt.index -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/models/nn_model_ep_96000.ckpt.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/models/nn_model_ep_96000.ckpt.meta -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/multi_a3c.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/multi_a3c.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/multi_agent.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/multi_agent.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/rl_test.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/rl_test.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/rl_test_all.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/rl_test_all.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/training_scrip.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/training_scrip.py -------------------------------------------------------------------------------- /ABRPolicies/PensieveMultiVideo/training_script_notebook.ipynb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveMultiVideo/training_script_notebook.ipynb -------------------------------------------------------------------------------- /ABRPolicies/PensieveSingleVideo/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ABRPolicies/PensieveSingleVideo/single_a3c.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/PensieveSingleVideo/single_a3c.py -------------------------------------------------------------------------------- /ABRPolicies/SimpleABRPolicy.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/SimpleABRPolicy.py -------------------------------------------------------------------------------- /ABRPolicies/ThroughputEstimator.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/ABRPolicies/ThroughputEstimator.py -------------------------------------------------------------------------------- /ABRPolicies/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /BehaviourCloning/ActionCloning.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/BehaviourCloning/ActionCloning.py -------------------------------------------------------------------------------- /BehaviourCloning/GeneticFeatureEngineering.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/BehaviourCloning/GeneticFeatureEngineering.py -------------------------------------------------------------------------------- /BehaviourCloning/ImitationLearning.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/BehaviourCloning/ImitationLearning.py -------------------------------------------------------------------------------- /BehaviourCloning/MLABRPolicy.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/BehaviourCloning/MLABRPolicy.py -------------------------------------------------------------------------------- /BehaviourCloning/RewardShapingCloning.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/BehaviourCloning/RewardShapingCloning.py -------------------------------------------------------------------------------- /BehaviourCloning/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DashExperiments/Makefile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/Makefile -------------------------------------------------------------------------------- /DashExperiments/dash_abr_test.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/dash_abr_test.py -------------------------------------------------------------------------------- /DashExperiments/make_plot.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/make_plot.py -------------------------------------------------------------------------------- /DashExperiments/make_testcase.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/make_testcase.py -------------------------------------------------------------------------------- /DashExperiments/server_conf/config.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/server_conf/config.json -------------------------------------------------------------------------------- /DashExperiments/src/chromedriver: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/chromedriver -------------------------------------------------------------------------------- /DashExperiments/src/http/http_traffic.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/http_traffic.py -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/.gitignore -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/LICENSE -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/README.md -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/client.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/client.py -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/cnn.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/cnn.html -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/config.py.template: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/config.py.template -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/ebay.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/ebay.html -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/gen.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/gen.py -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/google.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/google.html -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/http_traffic_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/http_traffic_server.py -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/wikipedia.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/wikipedia.html -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/yahoo.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/yahoo.html -------------------------------------------------------------------------------- /DashExperiments/src/http/web-traffic-generator/youtube.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/http/web-traffic-generator/youtube.html -------------------------------------------------------------------------------- /DashExperiments/src/run_browser_test.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/run_browser_test.py -------------------------------------------------------------------------------- /DashExperiments/src/udp_video_transfer/proxy_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/udp_video_transfer/proxy_server.py -------------------------------------------------------------------------------- /DashExperiments/src/udp_video_transfer/video_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/udp_video_transfer/video_server.py -------------------------------------------------------------------------------- /DashExperiments/src/udp_video_transfer/video_server_limit.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/udp_video_transfer/video_server_limit.py -------------------------------------------------------------------------------- /DashExperiments/src/utils/release.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/utils/release.sh -------------------------------------------------------------------------------- /DashExperiments/src/video_server/BB_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/BB_server.py -------------------------------------------------------------------------------- /DashExperiments/src/video_server/BOLA_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/BOLA_server.py -------------------------------------------------------------------------------- /DashExperiments/src/video_server/RB_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/RB_server.py -------------------------------------------------------------------------------- /DashExperiments/src/video_server/RL_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/RL_server.py -------------------------------------------------------------------------------- /DashExperiments/src/video_server/a3c.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/a3c.py -------------------------------------------------------------------------------- /DashExperiments/src/video_server/models/pretrain_linear_reward.ckpt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/models/pretrain_linear_reward.ckpt -------------------------------------------------------------------------------- /DashExperiments/src/video_server/models/pretrain_linear_reward.ckpt.data-00000-of-00001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/models/pretrain_linear_reward.ckpt.data-00000-of-00001 -------------------------------------------------------------------------------- /DashExperiments/src/video_server/models/pretrain_linear_reward.ckpt.index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/models/pretrain_linear_reward.ckpt.index -------------------------------------------------------------------------------- /DashExperiments/src/video_server/results/pretrain_linear_reward.ckpt.data-00000-of-00001: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/results/pretrain_linear_reward.ckpt.data-00000-of-00001 -------------------------------------------------------------------------------- /DashExperiments/src/video_server/results/pretrain_linear_reward.ckpt.index: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/results/pretrain_linear_reward.ckpt.index -------------------------------------------------------------------------------- /DashExperiments/src/video_server/results/pretrain_linear_reward.ckpt.meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/results/pretrain_linear_reward.ckpt.meta -------------------------------------------------------------------------------- /DashExperiments/src/video_server/trees/zdf_tree/classifier: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/trees/zdf_tree/classifier -------------------------------------------------------------------------------- /DashExperiments/src/video_server/zdf_tree_server.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/DashExperiments/src/video_server/zdf_tree_server.py -------------------------------------------------------------------------------- /Experiments/SampleExperiment.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/Experiments/SampleExperiment.py -------------------------------------------------------------------------------- /Experiments/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/LICENSE.md -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/README.md -------------------------------------------------------------------------------- /SimulationEnviroment/Rewards.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/SimulationEnviroment/Rewards.py -------------------------------------------------------------------------------- /SimulationEnviroment/SimulatorEnviroment.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/SimulationEnviroment/SimulatorEnviroment.py -------------------------------------------------------------------------------- /SimulationEnviroment/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Transformer/LegacyTransformer.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/Transformer/LegacyTransformer.py -------------------------------------------------------------------------------- /Transformer/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Transformer/reference_creation_script.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/Transformer/reference_creation_script.py -------------------------------------------------------------------------------- /Transformer/sample_creation_script.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/Transformer/sample_creation_script.py -------------------------------------------------------------------------------- /Utility/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Utility/tree_mapper.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/Utility/tree_mapper.py -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/magruener/reconstructing-proprietary-video-streaming-algorithms/HEAD/requirements.txt --------------------------------------------------------------------------------