PROJECT IS WORK IN PROGRESS!
rocd: audio streaming daemon

About project
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.
Features
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.
Use cases
TBD
Technology
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
Compatibility
Since rocd is based on Roc Toolkit, it is automatically interoperable with all other software based on it.
Remote peer can be:
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
Releases
TBD
Installation
TBD
Usage
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.
Hacking
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.
Authors
See here.
License
Contents of the repository is licensed under MPL-2.0.
For details on Roc Toolkit licensing, see here.