{"id":18622085,"url":"https://github.com/security-union/av1-streaming","last_synced_at":"2025-04-11T03:31:08.510Z","repository":{"id":64164378,"uuid":"456965419","full_name":"security-union/av1-streaming","owner":"security-union","description":"AV1 streaming for Linux and Raspberry PI","archived":false,"fork":false,"pushed_at":"2023-10-21T16:25:09.000Z","size":1861,"stargazers_count":59,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-04-03T06:42:24.017Z","etag":null,"topics":["av1","embedded-systems","rav1e","rust","video","web-codecs","webcodecs"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/security-union.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}},"created_at":"2022-02-08T14:24:58.000Z","updated_at":"2025-02-22T17:57:38.000Z","dependencies_parsed_at":"2023-01-15T01:31:02.060Z","dependency_job_id":null,"html_url":"https://github.com/security-union/av1-streaming","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/security-union%2Fav1-streaming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/security-union%2Fav1-streaming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/security-union%2Fav1-streaming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/security-union%2Fav1-streaming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/security-union","download_url":"https://codeload.github.com/security-union/av1-streaming/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248335409,"owners_count":21086587,"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","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":["av1","embedded-systems","rav1e","rust","video","web-codecs","webcodecs"],"created_at":"2024-11-07T04:15:20.052Z","updated_at":"2025-04-11T03:31:07.863Z","avatar_url":"https://github.com/security-union.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Ww0Xt1mAMy31Ofar0GYu8Oab0v2k0uF1XT_zTt5kPU1M8o58sT5OOXCsSxv3nNGxsG8dG4zI=w1060-fcrop64=1,00005a57ffffa5a8-k-c0xffffffff-no-nd-rj (1)](https://user-images.githubusercontent.com/1176339/155262320-ce1406f0-d35d-418e-a8b9-60b928cceeb2.jpeg)\n\n\n# 🔥🔥 Fearless AV1 live streaming for Linux and Raspberry PI using the rav1e encoder and Chrome's WebCodecs library 🔥🔥\n\n[![IMAGE ALT TEXT](http://img.youtube.com/vi/ysqn2kKsvoE/maxresdefault.jpg)](https://www.youtube.com/watch?v=ysqn2kKsvoE \"YouTube video\")\n\n## YouTube Video\n\n\u003chttps://www.youtube.com/watch?v=ysqn2kKsvoE\u003e\n\n## Goal\nUse the latest and greatest open source technology to live stream from a Raspberry PI to the Chrome browser.\n\n## TLDR\n\n1. Start Docker `docker-compose up`\n\n2. Go to `localhost:3000`\n\n### Customization\n\nDepending on your webcam, you might need to customize the framerate in the docker-compose.yaml file:\n\n```\n    environment:\n      - RUST_LOG=info\n      - FRAMERATE=30\n      - VIDEO_DEVICE_INDEX=0\n```\n\nIf you notice that the FPS is too low, just set FRAMERATE to 10\n\n![Peek 2022-03-15 00-26](https://user-images.githubusercontent.com/1176339/158306781-101b8cae-5b9f-4f1d-aec6-b6f097a54be1.gif)\n\n\n## AV1 Streaming\nAOMedia Video 1 (AV1) is an open, royalty-free video coding format initially designed for video transmissions over the Internet. It was developed as a successor to VP9 by the Alliance for Open Media (AOMedia),\n\n## WebCodecs\nModern web technologies provide ample ways to work with video. Media Stream API, Media Recording API, Media Source API, and WebRTC API add up to a rich tool set for recording, transferring, and playing video streams. While solving certain high-level tasks, these APIs don't let web programmers work with individual components of a video stream such as frames and unmuxed chunks of encoded video or audio. To get low-level access to these basic components, developers have been using WebAssembly to bring video and audio codecs into the browser. But given that modern browsers already ship with a variety of codecs (which are often accelerated by hardware), repackaging them as WebAssembly seems like a waste of human and computer resources.\n\nWebCodecs API eliminates this inefficiency by giving programmers a way to use media components that are already present in the browser. \n\nSpecifically:\n\n1. Video and audio decoders\n2. Video and audio encoders\n3. Raw video frames\n4. Image decoders\n5. The WebCodecs API is useful for web applications that require full control over the way media content is processed, such as video editors, video conferencing, video streaming, etc.\n\n\n## Tech Stack\n\n### Raspberry PI App (video-streaming)\n1. Camera recorder: nokhwa https://crates.io/crates/nokhwa\n2. AV1 encoder: rav1e https://crates.io/crates/rav1e\n3. WebSocket server: warp https://crates.io/crates/warp\n\n### UI (web-ui)\n1. UI Framework: React https://reactjs.org/\n2. Web AV1 decoder: WebCodecs https://web.dev/webcodecs/\n3. WebSockets: react-use-websocket https://www.npmjs.com/package/react-use-websocket\n\n\n\n## 👤 Contributors ✨\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/darioalessandro\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1176339?s=400\u0026v=4\" width=\"100\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDario\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e\n\u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/griffobeid\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/12220672?s=400\u0026u=639c5cafe1c504ee9c68ad3a5e09d1b2c186462c\u0026v=4\" width=\"100\" alt=\"\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGriffin Obeid\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003c/td\u003e    \n\u003c/tr\u003e\n\u003c/table\u003e\n\n## Show your support\n\nGive a ⭐️ if this project helped you!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecurity-union%2Fav1-streaming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsecurity-union%2Fav1-streaming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsecurity-union%2Fav1-streaming/lists"}