Janus plugin to serve as a WebRTC Selective Forwarding Unit (SFU) for game networking data. It was designed as the backend for Mozilla Hubs, although Hubs no longer uses it.
See here for API documentation on how to communicate with the plugin.
PRs and GitHub issues are welcome.
This is a plugin for Janus, so you'll need to install and run Janus first. The installation instructions on GitHub are canonical. It's compatible with Janus version 0.11.6 and later, although sometimes Janus makes changes that break plugins.
This plugin should be compatible with any OS that can run Janus; that includes Linux, OS X, and Windows via WSL. If you use a version from a package manager, you might want to check to make sure it has data channel support, which is a compile-time option. (Debian and Ubuntu have it.)
These are the native dependencies necessary for building the Rust plugin. For Janus's dependencies, consult its documentation.
$ sudo apt install libglib2.0-dev libjansson-dev
$ cargo build [--release]
$ cargo test
Install the library output by the build process (e.g. ./target/release/libjanus_plugin_sfu.so) into the Janus plugins directory (e.g. /usr/lib/janus/plugins). Restart Janus to activate.
The plugin accepts a configuration file in the Janus configuration directory named janus.plugin.sfu.cfg
containing key/value pairs in INI format. An example configuration file is provided as janus.plugin.sfu.cfg.example
.
You can test your install by pointing a browser at the tiny.html
client provided in the client
directory. If you open two browser windows, you should be able to share your microphone, share your screen, and send data channel messages in one, and see the results in the other.
You can use this plugin with A-Frame and networked-aframe. Look at the adapters table for a maintained version of the naf-janus-adapter.
See docker folder in this repository to build a docker image.