Overview
This project provides a GStreamer‑based MCU that receives multiple WebRTC streams, composes them into a 2×2 video grid, mixes audio, and records the result as an MP4 file.
Features
- Dynamic peer handling via Erlang signalling
- 2 × 2 video grid layout (extendable)
- Audio mixing with
audiomixer - MP4 recording via
mp4mux
Getting Started
1> application:which_applications().
[{rtp,"Unified WebRTC Video chat rooms & signaling monolith","0.1.0"},
{mnesia,"MNESIA CXC 138 12","4.26.1"},
{eturnal,"STUN/TURN server","1.12.0"},
{stun,"STUN and TURN library for Erlang / Elixir","1.2.9"},
{fast_tls,"TLS / SSL OpenSSL-based native driver for Erlang / Elixir","1.1.16"},
{conf,"YAML configuration for Erlang applications","0.2.6"},
{yval,"YAML validator","1.0.10"},
{fast_yaml,"Fast YAML native library for Erlang / Elixir","1.0.40"},
{p1_utils,"Erlang utility modules from ProcessOne","1.0.25"},
{syn,"A scalable global Process Registry and Process Group manager.","3.4.2"},
{kvs,"KVS Abstract Chain Database","9.4.1"},
{nitro,"NITRO Nitrogen Web Framework","7.10.0"},
{n2o,"N2O MQTT TCP WebSocket","10.3.3"},
{websock_adapter,"A set of WebSock adapters for common web servers","0.5.9"},
{bandit,"A pure-Elixir HTTP server built for Plug & WebSock apps","1.12.0"},
{hpax,"Implementation of the HPACK protocol (RFC 7541) for Elixir","1.0.4"},
{websock,"A specification for WebSocket connections","0.5.3"},
{plug,"Compose web applications with functions","1.20.3"},
{plug_crypto,"Crypto-related functionality for the web","2.1.1"},
{mime,"A MIME type module for Elixir","2.0.7"},
{eex,"eex","1.20.2"},
{thousand_island,"A simple & modern pure Elixir socket server","1.5.0"},
{telemetry,"Dynamic dispatching library for metrics and instrumentations","1.4.2"},
{logger,"logger","1.20.2"},
{elixir,"elixir","1.20.2"},
{compiler,"ERTS CXC 138 10","10.0.1"},
{inets,"INETS CXC 138 49","9.7.1"},
{ssl,"Erlang/OTP SSL application","11.7.2"},
{public_key,"Public key infrastructure","1.21.2"},
{asn1,"The Erlang ASN1 compiler version 5.5","5.5"},
{crypto,"CRYPTO","5.9"},
{stdlib,"ERTS CXC 138 10","8.0.1"},
{kernel,"ERTS CXC 138 10","11.0.2"}]
rebar3 get-deps && rebar3 shell
./c_src/gst < output.mp4