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).

Language: Kotlin

I don't think there is comprehensive information about that. We all do pretty much the same, implement the Selective Forwarding Unit (SFU) model.

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!

It is possible to have conference calls with e2e encryption.

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).

First of all, there are 2 different kinds of video calls: 1:1 and group calls. For 1:1 calls, e2e encryption doesn't cause any problem at all.

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).

Awesome client-side resource! WebRTC is poised to hit the big time now that it is supported by iOS 11.

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)