Roc Toolkit 0.2 released

(Roc Droid logo)

What is Roc?

Roc is a toolkit for real-time streaming over unreliable networks. It works with desktop and embedded Linux, ALSA, PulseAudio, PipeWire, macOS, and Android.

For a quick intro, see project repo and two previous articles: 1, 2.

Summary

Full changelog is available here.

The main focus of this release was:

  • polishing C API
  • creating bindings for Go and Java
  • Android support
  • preparing internals for control and signaling protocols

We also created a small Android app.

PulseAudio modules were moved to a separate repo. Also I’m happy to report that PipeWire now provides Roc modules out of the box, see details here.

A huge amount of work has been done that for now remains invisible. Internals were reworked to be ready for adding control and signaling protocols. Roc has got an implementation of task-based pipeline, network, and control loops communicating via lock-free task and packet queues in a non-blocking and realtime-safe manner.

Roc also got initial support for RTCP and SDP. RTSP is coming next. We also started work on adding encryption support using OpenSSL.

Here is amount of changes since last 0.1.x release:

$ git diff --stat v0.1.5..v0.2.1 | tail -1
 934 files changed, 94556 insertions(+), 24863 deletions(-)

Tutorial

You can find step-by-step tutorial for the new release in this article.

Credits

Thanks to Asal Mirzaieva, who created and maintains Go bindings, Matteo Arella, who created and maintains Java bindings, and Andrey Bushmin, who maintains Java bindings and created the Android app.

I want thank Boring Technologies Inc., which sponsored part of the work on this release and hired me and Mikhail Baranov full-time for a few months.

Special thanks to Alexandre Magaud who contributed a series of patches for SDP support, and Valeria Khomyakova for Roc Droid UI and logo.

And of course, big thanks to all the contributors! During this release, Roc got about 20 new contributors, which is really exciting for me. They all are listed here.

And last but not least, thanks to everybody who reported issues on GitHub, mailing list, and chat!

Donations

I made up my mind to start receiving donations for the project. To start with, we have created accounts for Roc on OpenCollective and Liberapay.

I don’t expect significant income, however even small contributions should help; we will accumulate donated money and occasionally spend them to fund full-time work for a week or a few.

See details on this page.

Community

Besides mailing list, we now have a chat on Matrix and a forum and Q&A board on GitHub discussions.

See details here. Welcome to join!

Testing

I’ve tested the toolkit on 7 devices. In addition, Android app was tested on a few versions of Android.

I plan to expand the list of regularly tested devices in future: add non-ARM single board computers, add Android devices, and probably more *nix devices that are not Linux and macOS.

Plans

My plans for a few next releases are:

  • first of all, push fixes for pending bug reports and feature requests
  • help people who started packaging work
  • finish RTCP support
  • finish SDP support and implement RTSP support
  • allow fully configurable local and network encodings (sample format, depth, and rate, channel layout)
  • low-latency audio backends for ALSA and CoreAudio
  • virtual device for macOS
  • encryption support

Things that I would like to try next:

  • more audio codecs (e.g. Opus, Vorbis)
  • more FEC codecs (notably convolutional codecs)
  • automatically adjust latency
  • synchronized playback (multiroom)

If you would like to take part in development of these or other features, you’re more than welcome! Feel free to reach us on GitHub, mailing list, or chat.

Also I’m open to paid work on the project.

Updates

You can follow updates on the mailing list or on my twitter and mastodon.

Have fun!