rocd
is a real-time audio streaming daemon with REST API.
With it, you can:
- inspect and control audio devices
- initiate audio streaming between local devices and remote peers
- create virtual devices that automatically stream all sound to/from remote peers
The key idea is to isolate application code from complexities of network streaming and audio I/O.
Applications can be written in any language (e.g. node.js or python) and don't have any special requirements. Real-time path, sensitive to latency and performance, is fully enclosed inside rocd
.
Internally, rocd
is based on Roc Toolkit, which gives you:
- streaming high-quality audio with guaranteed latency
- robust work on unreliable networks like Wi-Fi, due to use of Forward Erasure Correction codes
- multiple profiles for different CPU and latency requirements
- portability and low requirements to hardware
With rocd
, these benefits are combined with a high-level, language-independent, and easy to use HTTP API. Basically you just say "stream from here to there" and it works.
TBD
rocd
is built on top of several big lower-level technologies:
-
For streaming:
- roc-toolkit - real-time streaming library that combines high quality, guaranteed latency, and loss repair
- roc-go - golang bindings to Roc Toolkit
-
For virtual devices:
- roc-sink and roc-source PipeWire modules - virtual devices for Linux with PipeWire
- roc-pulse - virtual devices for Linux with PulseAudio
- roc-vad - virtual devices for macOS CoreAudio
Since rocd
is based on Roc Toolkit, it is automatically interoperable with all other software based on it.
Remote peer can be:
- another instance of
rocd
- apps using C library or its bindings to other languages
- command-line tools
- sound server modules (PulseAudio, PipeWire, macOS CoreAudio)
- Roc Droid (Android app)
Third-party RTP peers are also supported, given that they implement all necessary extensions.
Currently supported platforms:
- Linux / PipeWire
- Linux / PulseAudio
- Linux / ALSA
- macOS / CoreAudio
- Windows / WASAPI
TBD
TBD
There are two ways to use rocd
:
- via REST API
- via web interface
In addition, rocd
can be configured via command-line flags and configuration file.
For further details, see USAGE.md.
Contributions in any form are always welcome! You can find issues needing help using help wanted and good first issue labels.
If you would like to dig into the project internals, have a look at HACKING.md.
See here.
Contents of the repository is licensed under MPL-2.0.
For details on Roc Toolkit licensing, see here.