Real-time audio streaming over network.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc Rename banner to logo Sep 20, 2017
scripts SCons: SoX debug mode Jan 5, 2018
site_scons/site_tools/roc SCons: forward terminating signal from tests Jan 6, 2018
src
.clang-format Format code Sep 20, 2017
.fmtignore Update .fmtignore Sep 20, 2017
.gitignore Add build.status to .gitignore Nov 27, 2017
.travis.yml Indent .travis.yml Oct 8, 2017
.version SCons: cosmectic fixes Sep 20, 2017
AUTHORS
CONTRIBUTING.md Update CONTRIBUTING.md Jun 6, 2017
Doxyfile
INSTALL.md Update INSTALL.md Oct 8, 2017
LICENSE
README.md Update README.md Sep 20, 2017
Roadmap.md Update Roadmap.md Sep 20, 2017
SConstruct Crash handler Jan 5, 2018

README.md

Roc: real-time audio streaming over network

Roc is a library and tools for real-time streaming of high-quality audio over unreliable network.

Goals:

  • guaranteed latency;
  • good quality of service on unreliable networks, such as 802.11 (Wi-Fi);
  • portability;
  • relying on open, standard protocols.

Status

Docker images used in Travis are availale on Docker Hub. See Continuous integration page for details.

Branch Linux
master
develop

Work in progress!

There is no public release yet. See Roadmap and open issues for current and future plans.

The upcoming 0.1 release will include the following features:

  • Simple public API for sender and receiver
  • Command line tools for sender and receiver
  • Network I/O
  • Sound I/O (in tools)
  • Audio processing pipeline with dynamic resampling
  • RTP support with uncompressed 16-bit linear PCM
  • FECFRAME support with Reed-Solomon and LDPC-Staircase FEC codes using OpenFEC
  • Documentation
  • Linux support, including Raspberry Pi
  • Mac OS X support
  • Proof of concept Roc-based network transport for PulseAudio

Documentation

Building

See examples on wiki. See also INSTALL for further details.

Try it

After building, tools are instaleld into bin/<host>/ directory.

Example usage:

  • Start receiver listening on all interfaces on UDP ports 10001 and 10002:

    $ roc-recv -vv -s :10001 -r :10002
    
  • Send WAV file to the receiver:

    $ roc-send -vv -s <receiver_ip>:10001 -r <receiver_ip>:10002 -i file.wav
    

See --help option for usage details.

Supported platforms

  • Linux
  • Mac OS X (work in progress)

There are plans to support other platforms, notably other *nix systems, Android, and maybe some embedded systems like FreeRTOS.

Supported protocols

There are plans to support RTCP, SAP/SDP, and RTSP in upcoming releases.

Contributing

Contributions are always welcome! Please read CONTRIBUTING for general hints and look at Roadmap and open issues to figure out what's going on.

  • If you'd like to report a bug, ask a question, or suggest a feature, feel free to create an issue.

  • If you'd like to submit a patch, create a pull request. For non-trivial changes, it may be reasonable to start with discussing the implementation details in an existing or a new issue.

Licensing

Roc source code is licensed under MPL-2.0, see LICENSE. Roc logos by botanicahouse are licensed under CC BY-SA 4.0.

Issues with external dependencies:

  • Roc may be configured to use FEC codec from OpenFEC, which is licensed under CeCILL, a GPL-like and GPL-compatible license. When Roc is built with OpenFEC support enabled, it must be distributed under a lincense compatible with CeCILL.

Authors

See AUTHORS.