Free, P2P, disposable group video calling app for the web
github.com
github.com
webRTC stuff has a ton of cool potential for p2p projects, hopefully more and more of it starts cropping up.
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’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 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.
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.
Works in all major browsers.
No signups. No downloads. 100% peer-to-peer.
Is this even possible with WebRTC? How do clients initially learn about each other's IP addresses and ports?
There seems to be some logic to facilitate that in the server code: https://github.com/vasanthv/talk/blob/master/server.js
I've never considered using WebRTC without STUN or TURN, but apparently it's quite possible, enabling LAN-only usage: https://stackoverflow.com/questions/30742431/webrtc-on-isola...
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?
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.
Many popular group video call solutions are end-to-end encrypted these days, so there isn't any re-encoding happening.
What format do you think an end2end encrypted video comes in over the wire?
I'm not too sure about end-to-end encryption in WebRTC, though; I remember reading that something different happens there [1].
[1] https://webrtchacks.com/you-dont-have-end-to-end-encryption-... and https://webrtchacks.com/true-end-to-end-encryption-with-webr...
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).
In other words, can this run if I upload the html, js and other files to static hosting?
https://github.com/vasanthv/talk/blob/master/server.js
The actual P2P handshake is done through these default ICE servers defined in the client script.
https://github.com/vasanthv/talk/blob/master/www/script.js
const ICE_SERVERS = [
{ urls: "stun:stun.l.google.com:19302" },
{ urls: "turn:openrelay.metered.ca:443", username: "openrelayproject", credential: "openrelayproject" },
];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.