https://github.com/payload/vidrs
a playground for exploring media capture, processing and publishing with rust
https://github.com/payload/vidrs
Last synced: 3 months ago
JSON representation
a playground for exploring media capture, processing and publishing with rust
- Host: GitHub
- URL: https://github.com/payload/vidrs
- Owner: payload
- License: apache-2.0
- Created: 2022-12-30T20:56:31.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-03-29T18:33:32.000Z (about 2 years ago)
- Last Synced: 2025-02-28T06:18:40.134Z (3 months ago)
- Language: Rust
- Size: 1.08 MB
- Stars: 7
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE-APACHE
Awesome Lists containing this project
README
# vidrs: a playground for exploring media capture, processing and publishing with rust
## How to use
On a MacOS system with an attached camera you can do the following steps:
* `brew install pkg-config libvpx`
* `cargo run`
* open the displayed address http://localhost:8080## Features
* bindings for camera capturing on MacOS using [madsmtm/objc2](https://github.com/madsmtm/objc2)
* encoding of 4:2:0 camera frames into VP8 frames using [astraw/env-libvpx-sys](https://github.com/astraw/env-libvpx-sys)
* sending VP8 frames via WebRTC to a browser test app using [webrtc-rs/webrtc](https://github.com/webrtc-rs/webrtc)
* handling WebRTC offer/answer exchange with [tokio](https://github.com/tokio-rs/tokio), [hyper](https://github.com/hyperium/hyper) and [serde](https://github.com/serde-rs/serde)
* miniquad egui view of local camera stream with YUV decoding shader## Ideas for feature work
- [ ] receive VP8 video via WebRTC, decode and write or display it
- [ ] add support for Linux and Windows camera capturing using [raymanfx/eye-rs](https://github.com/raymanfx/eye-rs) and [l1npengtul/nokhwa](https://github.com/l1npengtul/nokhwa)
- [ ] add camera device selection
- [ ] better way of figuring out which frame pixel format is preferred for the use case
- [ ] use [algesten/str0m](https://github.com/algesten/str0m) for handling WebRTC
- [ ] spin off some crates
- [ ] some dependencies use `objc` instead of `objc2`, so MacOS bindings could be implemented in different binding ecosystems
- [x] use some GUI to show video too, like [egui](https://github.com/emilk/egui), [iced](https://github.com/iced-rs/iced) or [tauri](https://github.com/tauri-apps/tauri)