Very neat. Nice to see more free and easy p2p stuff. Getting a p2p video/audio/screen share application going is definitely a lot less work than it once was. https://teamvideo.app/
webRTC stuff has a ton of cool potential for p2p projects, hopefully more and more of it starts cropping up.
The issue is that webrtc is very complex, bloated and hard to debug. It’s the only way to do browser based p2p though.
Plug: I’m working on a much simpler server-assisted p2p lib with relay fallback, over tcp, with BYO identity/auth. This is certainly for different use cases, but I thought I’d mention it. If anyone is interested, I’d be curious about your use cases.
It gets difficult when you have users saying they can't connect to each other. Then you have to get a better grasp on networking to understand why they can't, sometimes staring at Chrome's webrtc-internals page hoping something clicks. Otherwise you'll have your hands tied and just assume their network is incompatible. Even with a TURN server configured, the same problem can occur.
me crying reading through STUN protocol RFCs. You're exactly correct though, once you want to scale it or make it a "quality" piece of software the amount of knowledge you need to ingest is massive.
The protocol and spec mostly, but also the establishment dance and too many knobs. Which client and server libs are you using? Chances are if you dig in their deps it’s messy.
It’s also designed for real-time video and audio (udp), so reliable high-bandwidth streaming p2p apps takes a back seat.
That doesn’t mean it’s not the right choice to build stuff with today, especially browser based real-time apps! I’m all for webrtc getting easier.
I didn't use anything other than the basic webrtc examples from github and a rather basic exchange using a web socket (server was express). Obviously not completely P2P because you need to exchange capabilities somehow. Tbh it probably took me longer to get the domain and coturn set up than the webrtc.
I didn't look into how much bandwidth was being used. I was mainly using it for 1-4 person calls during lockdown. I wanted to write a video calling app that I could have full control of.
It's always easy to run a variant of the main example of a library. The question is: how difficult does it get when you want to do something slightly different?
Can someone explain how the two differ (either technically, or from the perspective of a use who just wants reliable/easy/private calls)? I've started using jitsi more because of Zoom's time limit enforcement, but I'm looking for alternatives also.
With great pleasure I contributed to this fantastic project! Simple and functional!
If someone have pleasure, can try also the p2p - sfu - c2c versions of mirotalk: https://github.com/miroslavpejic85
A happy weekend to everyone and a merry Christmas!
Hey! We were using mirotalk for p2p video consultations, but switched to jitsi because of the google translate integration. I know searching for all strings and replacing them with placeholders is a giant task, but google is really bad at translating single words without context
This is great, since many people are looking to get away from Zoom. I was on a call the other day that was hosted by a very large startup (raised $200M). They had to end the call at 40 mins "because of our subscription tier".
If companies this big don't want to pay a penny to Zoom, that's saying something! It doesn't mean there's a great market opportunity for a paid tool, but it does mean that free tools will get good usage. I'm looking forward to the normalization of Jitsi and other alternatives, so people don't think I'm a weirdo for sending out links to services they've never heard of.
I still think the clients need a coordination server to discover each other (won't use multicast/broadcast traffic). You could probably make a browser that does this, but if they already do then I am not aware of it.
What are my options for running a larger scale web conferences (up to a thousand endpoints perhaps, handful of them speaking) with free software and regular web browsers involved?
I guess past a certain point it's more like streaming than group calls. What have larger f/oss events such as FOSDEM used during the pandemic and what did they have to change to get it to scale?
> The sweet number is somewhere around 6 to 8 people in an average high-speed connection.
Based on mesh architecture WebRTC, so unfortunately not really an option for anything but small calls. WebRTC is fun, but in the end, someone has to do the encoding, and w/ mesh, the client pays the price.
The issue isn't really encoding but bandwidth, specifically upload bandwidth (due to needing to send your own stream to all n-1 other participants rather than just one SFU, which then fans out to n streams).
Many popular group video call solutions are end-to-end encrypted these days, so there isn't any re-encoding happening.
6 to 8 people is a lot even without using Star-Configuration WebRTC. For example, how many people do you talk to at once face to face in real life in an average group? 4 to 6 people calls its like the size of a normal table at a restaurant. It is the typical group conversation. You could argue large group calls become more and more unnatural after 8 total people.
WebRTC is pretty good at getting through complex NAT constellations, trying to punch through NATs via STUN/ICE and falling back to TURN in case that fails (but the latter requires a central coordination server).
It only needs a lightweight signalling server to relay each client's ICE candidates (which is more or less an opaque string to the server) to their peers, and if that succeeds, they can communicate P2P (audio, video, and even opaque byte streams).
All of the complex NAT traversal logic and the encrypting P2P protocol stack is baked into all modern browsers (or non-browser clients using a WebRTC library); the only thing that's needed is the signalling server, and practically a STUN server to facilitate ICE (but these use very little bandwidth and there are public ones available).
Since it's all peer-to-peer, there isn't anything being done on the server (I don't even think there is a server?)
Like others have said, the bottleneck will be your client's upload speed- if you have a meeting with 10 people, you're going to be sending your video out to 10 different peers.
webRTC stuff has a ton of cool potential for p2p projects, hopefully more and more of it starts cropping up.