{"id":13608380,"url":"https://github.com/skyzh/chaos-video","last_synced_at":"2025-10-13T23:33:43.582Z","repository":{"id":85472340,"uuid":"307040508","full_name":"skyzh/chaos-video","owner":"skyzh","description":"Course Project of CS339 Computer Networks","archived":false,"fork":false,"pushed_at":"2021-04-13T02:02:43.000Z","size":5915,"stargazers_count":7,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-08T21:39:03.333Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skyzh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2020-10-25T06:45:57.000Z","updated_at":"2022-06-24T13:14:41.000Z","dependencies_parsed_at":"2023-03-13T05:25:46.845Z","dependency_job_id":null,"html_url":"https://github.com/skyzh/chaos-video","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/skyzh/chaos-video","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyzh%2Fchaos-video","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyzh%2Fchaos-video/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyzh%2Fchaos-video/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyzh%2Fchaos-video/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skyzh","download_url":"https://codeload.github.com/skyzh/chaos-video/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyzh%2Fchaos-video/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017237,"owners_count":26086015,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":[],"created_at":"2024-08-01T19:01:26.839Z","updated_at":"2025-10-13T23:33:43.567Z","avatar_url":"https://github.com/skyzh.png","language":"JavaScript","funding_links":[],"categories":["资源清单"],"sub_categories":["CS3311 (原 CS339) - 计算机网络"],"readme":"# Chaos Video\n\nChaos-Video 将视频空间切分，并将这些空间分块以不同码率传输，通过统一的\nABR 控制器 Multi-ABR 协同工作，从而解决ABR 算法受码率档位限制的问题。\n\n详情可以参阅 slides.pdf 和 report.pdf。\n\n项目是计算机网络课程的小组项目，由 Alex Chi, Siyuan Bian, Shiqu Wu 合作完成。\n\n## Architecture Overview\n\n```plain\nvideo-player \u003c---\u003e chaos-proxy \u003c---\u003e blank-server \u003c---\u003e video-gen 生成的视频分块\n```\n\n## Usage\n\n首先，需要在本地准备一段测试视频和 Python, Node.js 环境。\n\n使用 `video-gen` 生成测试视频。\n\n```bash\ncd video-gen\npip install -r requirements.txt\npython main.py -i zelda_trailer.mp4 -sp \"(1,4)\" -o zelda -cd zelda-crop\n```\n\n而后，将视频文件拷贝到前端的 `public/data/` 目录下，编译 video-player 的前端文件。\n编译前，需要调整 `App.js` 的参数（比如帧率和视频文件位置）。\n\n```bash\ncd video-player\nnpm i\nnpm run build\n```\n\n理论上，目录中应该有这些文件。\n\n```plain\n.\n├── README.md\n├── build\n│   ├── asset-manifest.json\n│   ├── data\n│   │   ├── manifest.json\n│   │   ├── zelda\n│   │   │   ├── chunk_0_0\n│   │   │   │   ├── zelda_trailer_c_0_0.mp4_1000.m3u8\n                    ...\n│   │   │       └── zelda_trailer_c_0_3.mp4_master.m3u8\n│   │   └── zelda-crop\n│   │       ├── zelda_trailer_c_0_0.mp4\n│   │       ├── zelda_trailer_c_0_1.mp4\n│   │       ├── zelda_trailer_c_0_2.mp4\n│   │       └── zelda_trailer_c_0_3.mp4\n│   ├── index.html\n│   ├── robots.txt\n│   └── static\n│       ├── css\n│       │   ├── main.d5ebe71c.chunk.css\n│       │   └── main.d5ebe71c.chunk.css.map\n│       └── js\n│           ├── 2.3cdf8e33.chunk.js\n│           ├── 2.3cdf8e33.chunk.js.LICENSE.txt\n│           ├── 2.3cdf8e33.chunk.js.map\n│           ├── main.623b8678.chunk.js\n│           ├── main.623b8678.chunk.js.map\n│           ├── runtime-main.dd450042.js\n│           └── runtime-main.dd450042.js.map\n├── package-lock.json\n├── package.json\n├── public\n│   ├── data\n│   │   ├── manifest.json\n│   │   ├── zelda\n│   │   │   ├── chunk_0_0\n│   │   │   │   ├── zelda_trailer_c_0_0.mp4_1000.m3u8\n│   │   │   │   ├── zelda_trailer_c_0_0.mp4_1000_00000.ts\n                    ...\n│   │   │       └── zelda_trailer_c_0_3.mp4_master.m3u8\n│   │   └── zelda-crop\n│   │       ├── zelda_trailer_c_0_0.mp4\n│   │       ├── zelda_trailer_c_0_1.mp4\n│   │       ├── zelda_trailer_c_0_2.mp4\n│   │       └── zelda_trailer_c_0_3.mp4\n│   ├── index.html\n│   └── robots.txt\n├── result\n├── src\n│   ├── AbrController.js\n│   ├── App.js\n│   ├── App.scss\n│   ├── EWMA.ts\n│   ├── EwmaBandWidthEstimator.ts\n│   ├── index.js\n│   ├── index.scss\n│   ├── react-app-env.d.ts\n│   ├── streamChart.js\n│   ├── useForceUpdate.js\n│   └── utils.ts\n└── tsconfig.json\n\n20 directories, 920 files\n```\n\n最后，通过 docker-compose 一键启动所有服务，即可测试。\n\n```bash\ndocker-compose up -d --build\n```\n\n## Development Guide\n\n* 先使用 venv 在项目目录里创建一个 virtual environment `python3 -m venv .venv`\n* 而后激活虚拟环境 `source .venv/bin/activate` (Windows 可能要使用其他方法)\n* 安装依赖 `pip install -r requirements.txt`\n* 此时 VSCode 应该可以自动识别到虚拟环境，在开发过程中自动使用虚拟环境中的 Python。\n* 开始开发 `git checkout -b some-new-feature`\n* 测试 `make test`\n* 格式化代码 `make format`\n* 检查 warning `make lint`\n* 发 PR\n  * `git add -A`\n  * `git commit -m \"module: what have you done\"`\n  * `git push origin HEAD -u`\n  * 在 GitHub 网页端发 PR\n* PR 合并后，`git checkout master \u0026\u0026 git pull`，更新本地 master 分支。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskyzh%2Fchaos-video","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskyzh%2Fchaos-video","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskyzh%2Fchaos-video/lists"}