What does HackerNews think of jitsi-videobridge?
Jitsi Videobridge is a WebRTC compatible video router or SFU that lets build highly scalable video conferencing infrastructure (i.e., up to hundreds of conferences per server).
The idea is the SFU will receive a number of streams for each user (usually up to 3, in low, mid and high resolutions) and then it will forward one of them to each other participant depending on things like available bandwidth, requested video size, etc.
There are a number of Open Source implementations available, in case you want to study it deeper:
- Jitsi videobridge: https://github.com/jitsi/jitsi-videobridge
- Janus: https://github.com/meetecho/janus-gateway
- mediasoup: https://github.com/versatica/mediasoup
- (p)ion: https://github.com/pion/ion-sfu
- meddoze: https://github.com/medooze/media-server-node
And probably more!
Many conference calls are implemented using what's called a Selective Forwarding Unit (SFU) and the sending clients send multiple resolutions (either independent, called "Simulcast" or dependent, called "SVC"). In that case, the adaptation is done by the server in selecting which resolution to forward at any given time. This is fairly common practice in the industry. For example: https://github.com/jitsi/jitsi-videobridge and https://tools.ietf.org/html/draft-aboba-avtcore-sfu-rtp-00 and https://www.w3.org/TR/webrtc-svc/.
For those types of conference calls, the server only needs to know the sizes of the various streams and which packet is for what stream. It does not need to see the decrypted media, so one can implement e2e encryption for such types of group calls. This is less common in the industry, but is possible. For example: https://support.google.com/duo/answer/9280240?hl=en
(I used to work at Google on WebRTC, Duo, and Hangouts, but now work on video calling at Signal).
For group calls, it depends on how it's implemented, but many group calls are implemented using what's called a Selective Forwarding Unit (SFU) and the sending clients send multiple resolutions (either independent, called "Simulcast" or dependent, called "SVC"). In that case, the adaptation is done by the server in selecting which resolution to forward at any given time. This is fairly common practice in the industry. For example: https://github.com/jitsi/jitsi-videobridge and https://tools.ietf.org/html/draft-aboba-avtcore-sfu-rtp-00 and https://www.w3.org/TR/webrtc-svc/.
For those types of group calls, the server only needs to know the sizes of the various streams and which packet is for what stream. It does not need to see the decrypted media, so one can implement e2e encryption for such types of group calls. This is less common in the industry, but is possible. For example: https://support.google.com/duo/answer/9280240?hl=en
(I used to work at Google on WebRTC, Duo, and Hangouts, but now work on video calling at Signal).
For both of my questions below I will link options from previous discussions[1]; any experience you can share would be appreciated.
1) What is the best option to implement a server that can tie into WebRTC for audio/video/screensharing?
https://github.com/mappum/electron-webrtc - simple but bulky Node.js WebRTC via a hidden Electron process
https://chromium.googlesource.com/external/webrtc - C++ Chromium WebRTC
https://github.com/jitsi/jitsi-videobridge - Java video conferencing
https://github.com/Kurento/kurento-media-server | https://github.com/OpenVidu/openvidu - Node.js media server transitioning after Twilio hired key devs
https://www.wowza.com/products/capabilities/webrtc-streaming... - commercial; in preview
2) What is the best minimal WebRTC server-side option just for UDP?
https://github.com/js-platform/node-webrtc - Node.js native module with mystical pre-built binaries
https://github.com/HumbleNet/HumbleNet/ - C++ Mozilla + Humble Bundle code drop that does signalling via WebSockets (instead of STUN/TURN/ICE?)
https://github.com/rawrtc/rawrtc - C with CLI examples; media someday? https://github.com/rawrtc/rawrtc/issues/4
https://github.com/seemk/WebUdp - prototype C++ WebRTC datachannel server for Linux looking for help
https://github.com/brkho/client-server-webrtc-example - C++ MVP using Chromium WebRTC http://blog.brkho.com/2017/03/15/dive-into-client-server-web...
--
[1] A real world guide to WebRTC | https://news.ycombinator.com/item?id=14787285 (Jul 2017, 59 comments)