{"id":49118705,"url":"https://github.com/banksemi/mpquic-rl","last_synced_at":"2026-04-21T09:35:38.146Z","repository":{"id":96482907,"uuid":"485825721","full_name":"banksemi/mpquic-rl","owner":"banksemi","description":"Reinforcement Learning-based Multipath QUIC Scheduler for Multimedia Streaming","archived":false,"fork":false,"pushed_at":"2025-11-24T05:30:48.000Z","size":51517,"stargazers_count":18,"open_issues_count":4,"forks_count":6,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-24T05:38:03.446Z","etag":null,"topics":["go","mpquic","quic","scheduler"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/banksemi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-26T14:39:29.000Z","updated_at":"2025-11-24T05:30:55.000Z","dependencies_parsed_at":"2023-03-16T21:00:52.414Z","dependency_job_id":null,"html_url":"https://github.com/banksemi/mpquic-rl","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/banksemi/mpquic-rl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banksemi%2Fmpquic-rl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banksemi%2Fmpquic-rl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banksemi%2Fmpquic-rl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banksemi%2Fmpquic-rl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/banksemi","download_url":"https://codeload.github.com/banksemi/mpquic-rl/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/banksemi%2Fmpquic-rl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32085733,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-21T06:27:27.065Z","status":"ssl_error","status_checked_at":"2026-04-21T06:27:21.250Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["go","mpquic","quic","scheduler"],"created_at":"2026-04-21T09:35:37.120Z","updated_at":"2026-04-21T09:35:38.122Z","avatar_url":"https://github.com/banksemi.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Multipath QUIC RL Scheduler\n\n[![DOI](https://img.shields.io/badge/DOI-10.3390/s22176333-important)](https://doi.org/10.3390/s22176333)\n\n**Reinforcement Learning Based Multipath QUIC Scheduler for Multimedia Streaming**\n- Seunghwa Lee, and Joon Yoo.\n- Sensors 22.17 (2022): 6333.\n- [https://doi.org/10.3390/s22176333](https://doi.org/10.3390/s22176333)\n\n## Summary\nThis project implements a reinforcement learning-based scheduler to optimize the performance of Dynamic Adaptive Streaming over HTTP (DASH) in Multipath QUIC (MPQUIC).\n\nThe testbed is constructed based on [MAppLE](https://github.com/vuva/MAppLE). The main components of the MAppLE platform are as follows:\n- **Caddy**: A web server supporting QUIC\n- **AStream**: Python-based DASH performance measurement framework\n- **quic-proxy**: A proxy that processes HTTP requests from the Python DASH client based on quic-go\n- **quic-go**: MPQUIC integration in a QUIC-based fork\n\nHere, the quic-go implementing MPQUIC uses the quic-go from the Peekaboo Repository. Therefore, ECF, BLEST, and Peekaboo can be tested in a DASH environment.\n\nFinally, we added a reinforcement learning scheduler implementation that considers chunk information and the client's buffer status.\n\n**References**\n  - **MAppLE**: [https://github.com/vuva/MAppLE](https://github.com/vuva/MAppLE)\n  - **AStream**: [https://github.com/pari685/AStream](https://github.com/pari685/AStream)\n  - **Peekaboo**: [https://ieeexplore.ieee.org/document/9110610](https://ieeexplore.ieee.org/document/9110610)\n\n## Environment Setup\nWe simplified the experimental environment configuration using Docker, allowing the test environment to be built regardless of the Linux kernel version. (It was tested on Ubuntu 18 in the original paper.)\n\n### 1. Run Docker Compose\nYou can build and run the containers using the command below.\n```bash\ndocker compose up -d --build\n```\nThis process may take some time as Go Build, video chunk preparation via ffmpeg, and Mininet environment setup are executed simultaneously using multi-stage builds.\n### 2. Generate Certificates for HTTPS Testing\nCaddy and AStream (Python DASH Client) use certificates to enable HTTPS.\n\nOnce the Docker containers are running, you can generate certificates via the following command:\n```bash\ndocker exec -it mininet /certs/makecert.sh\n```\n\nExecuting this code will create cert.pem and privkey.pem inside the /docker/certs folder.\n\n\u003e \\[!NOTE]\n\u003e\n\u003e **If the server IP has changed due to network topology changes**\n\u003e \n\u003e 1. Change the HOST IP entered in `/docker/certs/make_cert.sh`.\n\u003e 2. Remove all `/docker/certs/*.pem` files.\n\u003e 3. Regenerate the certificates.\n\n## Test Methods\n\nYou can proceed with the test using the command below.\n```\ndocker exec -it mininet python dash_demo.py --scheduler rl\n```\n\n**Available Scheduler Options**\n- rtt\n- ecf\n- blest\n- peek (Peekaboo)\n- rl (Our scheduler)\n\n**Execution Results**\n\nThe results are saved in /docker/logs.\n- `server.logs`: Logs output by Caddy. Since the server handles packet scheduling, if scheduler-related logs are added, they will be recorded in this file.\n- `client.logs`: Logs output by AStream.\n- `log/*`: Logs processed and saved by AStream. Metrics such as download time per chunk, buffering time, and initial playback delay can be checked.\n\n## Customization\n### Network Topology\n- **Topology**: You can change the network topology by modifying `/docker/mininettest/basicTopo.py`.\n- **Network Properties**: You can configure Packet loss, Bandwidth, Delay, etc., by modifying `tc_client.bash` and `tc_s1.bash` in the scripts subfolder.\n\n### MPQUIC Scheduler\nThe scheduler is implemented in `/quic-go/scheduler.go`.\n\nFor details, you can check the references for each scheduler at `/quic-go/scheduler.go:selectPath`.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbanksemi%2Fmpquic-rl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbanksemi%2Fmpquic-rl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbanksemi%2Fmpquic-rl/lists"}