webRTC videoconference-in-a-box (C monolith)
tiny-webrtc-gw: a webRTC conferencing server "monolith" written in C/C++
Welcome to the tiny-webrtc-gw readme!
Goals
- Infinite ⌚ duration streams (security ? friendly)
- private rooms
- 1-click-join links
- VP8,VP9,H.264
- very fast stream multiplexing via lightweight C
- NO cloud or external STUN/TURN involved ergo: raspberry-pi + airgapped LAN
- SD/HD bitrates
- High-performance: ~68Mbit/sec per stream+thread on an 800Mhz ARM7
- friendly chatroom-style UX (e.g. justin.tv)
Features
- Very low latency 1-many streaming
- HD stream (via media constraints) support
- text chat room
- highly scalable (native c/c++ code)
- end-to-end encrypted
- chrome/firefox/opera/safari (iOS) support
- easy compilation (just git checkout --recursive and "make all")
- select media devices
- code includes submodule referencing the standalone HTTPS server + example certificate
- Works directly with OBS via WHIP
Demo:
?chat lobby on a raspi4;
☝WHIP url (for OBS)
Pics:
Caveats:
since browsers won't allow webRTC to be negotiated unencrypted (https)
you will need to run an SSL frontend in front of the built-in
http server (see config.txt for that port)
lots of better built-ins exist but I use a tool I wrote as a proxy
[https://github.com/justinb01981/SSLTools]
(maybe just use a (free) self-signed certificate
generated by openssl(2) for now and import it into the conferencee's
browser/OS certificate trust-store)
Building:
building requires 'go' to compile boringssl (so install those packages)
from the base directory just run 'make all'.
Etc:
- 8/15 - NO host setup necessary (beyond making ports accessible) - this is possible with the new stun_client.c code - but in airgapped networks config.txt is the way to go.
- 9/14 - OBS-direct (no browser) streaming support coming - see https://webrtchacks.com/webrtc-cracks-the-whip-on-obs/
- constructing a share URL:
<your_https_prefix>/content/index_broadcast.html?joinroom=<roomname>&camera=0
--- e.g. https://tinyurl.com/jbhatestypingthis
(drops a user in "lobby" with camera disabled)