Multi-User Video Conference with WebRTC
mgechev-webrtc.herokuapp.com
mgechev-webrtc.herokuapp.com
WebRTC isn't supported on IE or Safari though, so it's kind of redundant for anything but experiments at the moment.
Using WebSockets you cannot make two browsers communicate directly without using any proxy in the middle.
So WebRTC has the following benefits:
- establish p2p connection between two browsers (not necessary required to be browsers)
- transfer media (audio/video) efficiently
- allows data streaming over UDP/TCP/SCTP (you can use one, depending on your application type - for example UDP if you're looking for performance over reliability)
And the following drawbacks:
- requires more complex architecture (for the NAT traversal procedures via ICE)
- you have no guarantee that the connection between the peers will be established (in case of symmetric NATs in front of the peers you want to connect)
- has more complex API
Edit: I see this is actually addressed in the linked article[1] - basically a webrtc gateway can be used. No mention of any support for (cryptographic) authentication and of peers and encryption of streams as far as I csn tell, though. Which makes it a bit worse than chatting over ham radio...
Edit2: Apparently webrtc is "secure" by default [2] - that is the streams are encrypted with a session key - but there's no (working) way to authenticate - or prevent/detect mitm. Obviously a gateway would need access to the (plain) streams for muxing (barring some creative N-way p2p key setup and just blasting encrypted data (eg by not supporting more than one peer to transmit - but with typical latencies this would probably dictate some form of manual "passing-the-mic" moderation).
[1] http://blog.mgechev.com/2014/12/26/multi-user-video-conferen...
The CAP theorem is likewise addressed by partitioning all the messages by conversation. There is little need for total consistency between conversations, only within them.
If you want me to elaborate further, you have to email me because there's too much to say.
Leaving the rest as it might have some value either way for those considering conference solutions and topologies...]
You're commenting on the parts about authentication? Because I don't see how setting up some dsl subscriber (or 4g mobile client) in (say) Japan is going to be very helpful in splitting two dozen 720p video streams across the global Internet for a modest multi-user video conference. Never mind the issues with the connection dropping for everyone if the designated "server" experience network (or other) issues..?
The original Planetside game from SOE bundled TeamSpeak (which is not p2p, but client-through-central-gateway/server) - but the bundled version was pretty much unusable in part because it meant one player hosted the server. Worked fine with a dedicated TeamsSpeak server (eg on a vps etc).
For many uses I can also see optional recording of conferences might be useful - but that could probaly be accommodated using a dedicated recording client (probably on a "server").
First, I dare to say that most WebRTC apps use websockets for signaling (to initialize the p2p connection). So it makes sense to use the two different technologies together.
Second, notice that the connection is peer to peer - no video data passes through your server, which saves you bandwidth and cpu cycles. This is the coolest thing about WebRTC. Even though you have to maintain websocket (or long polling, etc) connections on your server for each user, none of the data transmitted between peers will cost you anything.
In short - WebRTC is good for somethings, other things will be fine using only websocket.
WebSockets is an extension to a HTTP request that permits a bi-directional, persistent link between a client and server. You can exchange chunked messages, reliably and in-order using TCP. Once the WebSocket is established, you have free reign over what datastream is sent.
WebRTC is an extension of RTP (a UDP based protocol) that adds a layer of safety (to both users and to network infrastructure). The key requirement for "real-time" communications mandates that reliable and in-order delivery must be sacrificed in favour of getting low-latency data transfers.
Another benefit of WebRTC is that browser-side javascript has no control over the exact datagram being sent over the wire (called RTCWeb, all WebRTC communication is encrypted between peers using SRTP). This eliminates a whole class of UDP based attacks. The client (or intermediate proxies) must not be able to send a specially crafted UDP packet to arbitrary hosts and trigger a distributed reflection attack.
Having said that, WebRTC can be used to transport arbitrary data, you just can't send an arbitrary packet.
Which one should I be looking at?