As we switched to full home office at my university, we started establishing short regular video conferences. Unfortunately, most tools are overwhelmed and we would like to self host our infrastructure.
Do any of you have experience with self hosted tools for video conferences?
That's because every video feed usually needs to be realtime, low-latency transcoded to match the receivers bandwidth requirements. If some people in the meeting are on 3G while others are on fast internet, you can't send the same data to all of them! You can't send the same to all of them if different client devices have different hardware video encoders/decoders. Start doing software decoding and you'll soon end up draining users batteries like Zoom!
In a 10 person meeting, thats 10 incoming video feeds, and 100 outgoing video feeds. Not many machines can encode 100 video feeds in realtime! Obviously you can skimp on quality a bit and bucket users (ie. we'll have a high, a mid, and a low res feed, and just pick which to send).
For all the above reasons, that tends to be why self-hosted video conferencing systems are kinda laggy and gobble battery and have poor client support.
Big companies offering hosted VC solutions tend to have dedicated video encoding chips, so they can cheaply make hundreds of video streams to send to every participant.
Also, in practice for a big number of users you won't need to encode the videos streams more than 10 times because most people have the same kind of characteristics (you'll have up to three level of network connectivity, and most of your users will have h264 support so you will have few codecs to support).
For instance, you could go for 720p h264, 480p h264, 240p h264, and audio only for people with too little bandwidth or no h264 support, and you'll be good for most use cases.
I wish. With 10 users you have 102 - 10 = 90 different (unidirectional) data flows.
Each of them can run into a different bottleneck where person X cannot hear Y and Y cannot hear W...
And they cannot be monitored centrally (!).
Compared to a centralized location where you would have 10 user-->server + 10 server-->user flows.
On top of that, ISPs care about bandwidth between customers and large services e.g. AWS and don't care about ISP-to-ISP traffic.
Scalable video (and audio) never seemed to have taken off:
> SVC standardizes the encoding of a high-quality video bitstream that also contains one or more subset bitstreams. A subset video bitstream is derived by dropping packets from the larger video to reduce the bandwidth required for the subset bitstream. The subset bitstream can represent a lower spatial resolution (smaller screen), lower temporal resolution (lower frame rate), or lower quality video signal.
* https://en.wikipedia.org/wiki/Scalable_Video_Coding
* https://en.wikipedia.org/wiki/Bitrate_peeling
Add in the unrealistic upstream bandwidth needs and, yeah, your point still stands.
Secondly, if we consider receivers bandwidth, a client can encode 2 or 3 video streams, e.g. low, medium, and high quality video.
Video is usually both temporally compressed (across frames), and over frequency domain (ala jpeg) in the frame itself.
Transcoding is essentially what you're asking for, it downscales the video. It's the cheapest currently or we'd be using something else.
If you just dropped data you'd get that blocky square thing that you get when watching tv or satellite and the signal goes lossy.
https://matrix.org/docs/projects/server/synapse/
Edit: This is the client software: https://about.riot.im/features
[1]https://jitsi.org/jitsi-meet/
At the end of day one I can say that Jitsi audio is pretty good. However, the video does seem to freeze quite regularly. This was in calls with only 3 to 4 people. I don't know if it's a Jitsi problem, or somehow an integration problem with Riot.im.
Then again, because I can imagine that Jitsi has probably experienced astronomical traffic growth over the last few days as more and more people transition to remote working during the corona crisis, I don't want to be overly critical. I'll see how it plays out over the next couple of weeks. However, right now I'm not sure I'd want to use it for client based external calls.
Jitsi beats anything else ,including commercial stuff. You don't need any account, just browser.
https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-in...
https://github.com/jitsi/docker-jitsi-meet
edit: still, self-hosted won't have the phone numbers to join the room
Here's what we've tried so far:
Nextcloud: I'm running a nextcloud instance since ~2 years (it's awesome) and tried nextcloud talk several times, though for some reason we could not get audio and or video to work.
Just this week we tried jitsi because it's open source and can be self-hosted. Unfortunately while it worked in principle jitsi uses large amounts of cpu cycles when running in the browser and additionally latency and video quality was an issue.
For us the best option as of now is still https://whereby.com which works well regarding stability, audio/video quality and latency, though it's not self-hosted. I'm not affiliated in any way with them, I just like their product.
I'd love nextcloud talk to work, and I'm very curious about other solutions I'm not aware of - self-hosted and otherwise.
Edit:
After reviewing my nextcloud talk setup I saw that I didn't set up a TURN server which might be the reason it's not working. So it's not nextcloud, but incomplete setup.
We decided to roll this out to our users as a free service for 6 months. Our users are small business owners in the physical meat-world and don't typically have a Zoom subscription already.
I made a couple tweaks to the app- namely to be able to embed as an iFrame into our web application (and pass the room+user name in as GET parameters).
It works great! We've deployed it to Twilio's infrastructure so we didn't have worry about any of that. Will be rolling out to users today.
The before covid-19, a friend who organizes conferences told me how his firm achieved more by his not going to the second annual conference he organized in Shanghai and delegating more to his former helper, now main Shanghai organizer.
Even if you can't avoid everything, the more you find ways to simplify, the more you build your experience and skills to do so more the next time.
Note that all modern browsers support WebRTC. I wrote a simple server to setup WebRTC sessions between browsers that worked, but it's probably easier to use kurento.
"If your intended application consists of a complex setup with different kinds of sources and varied use cases, then Kurento is the best leverage you can use.
However, if you intend to solve a simpler use case, such as those of video conference applications, the OpenVidu project builds on top of Kurento to offer a simpler and easier to use solution that will save you time and development effort."
(edit: and here's a link to OpenVidu: https://openvidu.io/ )
You can also use the Ninja Mode (disposables VM's), but you'll have to pay for that.
Disclaimer: I'm the owner of yameeting.com and we use jitsi meet behind the scenes.
You can't limit who enters the room using a whitelist with the out-of-the-box jitisi installation but since it's using XMPP you can have that functionality.
I'm pretty sure there are solutions out there that focus on those features.
If you want more information or help with this just contact me hello at yameeting.com
Here's more information about that https://github.com/jitsi/jitsi-meet/issues/409