[HN Gopher] WebRTC for the Curious
___________________________________________________________________
WebRTC for the Curious
Author : sebg
Score : 80 points
Date : 2025-04-11 15:18 UTC (7 hours ago)
(HTM) web link (webrtcforthecurious.com)
(TXT) w3m dump (webrtcforthecurious.com)
| valorzard wrote:
| WebRTC is lowkey one of the most underrated technologies out
| there, ESPECIALLY WebRTC data channels.
|
| WebRTC data channels are basically "UDP on the web" but they have
| lots of controls to change how reliable they are, so they can be
| used as TCP style connections as well.
|
| I still don't fully understand why more people don't use them
| over something like QUIC. (I think I've asked this question
| before here, but I wasn't really satisfied with the answers)
|
| I sadly switched off of using them, but mostly because the
| ecosystem around there is super underdeveloped compared to the
| ecosystem around QUIC/quinn. There is a LOT of boilerplate
| involved that feels unnecessary.
|
| But, if you're making a multiplayer game in the web, it's
| basically the best technology to use cuz it already works. And if
| you use a library like libdatachannel or pion, you could make the
| game in Go or C++ and compile it for both Steam and the web!
|
| Here's a project I did with them that shows off compiled for both
| web and desktop: https://github.com/ValorZard/gopher-combat
| ronsor wrote:
| > I still don't fully understand why more people don't use them
| over something like QUIC.
|
| > the ecosystem around there is super underdeveloped compared
| to the ecosystem around QUIC/quinn
|
| > There is a LOT of boilerplate involved that feels unnecessary
|
| I think you just answered your own question and even gave the
| answers I would've given.
| valorzard wrote:
| Well it's a bit of a chicken or the egg situation right? None
| of those issues will get better if no one uses it.
| torginus wrote:
| > I still don't fully understand why more people don't use them
| over something like QUIC
|
| Dealing with NAT traversal especially with full-cone NATs is
| difficult and expensive - you have to maintain dedicated
| infrastructure of TURN servers for NAT and you have to proxy
| all your traffic through that, it's quite the overhead,
| especially since IPv4 addresses and bandwidth on AWS don't come
| cheap.
| Sean-Der wrote:
| I am so happy that WebRTC has so many implementations. Every
| developer thinks differently, it's good to have a
| implementation that matches your mindset.
|
| * https://github.com/shinyoshiaki/werift-webrtc (Typescript)
|
| * https://github.com/pion/webrtc (Golang)
|
| * https://github.com/webrtc-rs/webrtc (Rust)
|
| * https://github.com/algesten/str0m (Rust)
|
| * hhttps://github.com/sepfy/libpeer (C/Embedded)
|
| * https://webrtc.googlesource.com/src/ (C++)
|
| * https://github.com/sipsorcery-org/sipsorcery (C#)
|
| * https://github.com/paullouisageneau/libdatachannel (C++)
|
| * https://github.com/elixir-webrtc (Elixir)
|
| * https://github.com/aiortc/aiortc (Python)
|
| * GStreamer's webrtcbin (C)
|
| See https://github.com/sipsorcery/webrtc-echoes for examples of
| some running against each other.
| esafak wrote:
| Anyone used a JVM implementation?
| lostmsu wrote:
| Sadly, SipSorcery is lagging behind as of now. We only have
| H.264 and VP8 support for video, data channels only have
| partial implementation (only reliable ordered), and the
| performance of data channels is far from what it could be.
|
| But it is a great starting point for anyone working in C#.
| moffkalast wrote:
| The horrible boilerplate and complexity is why people don't use
| it. Getting even simple usage examples seems to be a tall order
| for some use cases and LLMs are hopeless in trying to help with
| it.
|
| P2P connections are also often blocked by ISPs for whatever
| reason, making it impossible to use without a fallback TURN
| server which defeats the entire purpose of the thing if you
| wanted to do scalable multiplayer without the server
| infrastructure. You're left sending over the whole stream with
| double the latency and have to eat all the bandwidth.
| Sean-Der wrote:
| I hope everyone enjoys WebRTC for the Curious (I am one of the
| authors). If you have any ideas on how to make it better I would
| love to hear :)
|
| WebRTC is absolutely magical. Having 'Web' in the name does it a
| disservice. I see it used to.
|
| * Remotely control excavators
|
| * Security Cameras
|
| * Connect autonomous robots in factories
|
| * Low latency streaming from sail boats and rocket ships
|
| * And all the use cases you expect (Conferencing, Telehealth
| etc..)
| fidotron wrote:
| My experience is WebRTC has an on-ramp problem, which this is
| partly to address, but it is significantly helped if you are
| thrown in the deep end to work on it with someone that knows
| the quirks already. The big thing I got from that process was
| to stop being afraid of reading the SDP, because a huge amount
| of the problems you will run into are really the result of SDP
| oddities. It is credit to people like the libwebrtc maintainers
| that the complex morass of MediaStreamTrack processing is as
| solid and performant as it is these days. (And extendable).
|
| I share the view that it should form the basis of real time
| communication, humans involved or not, and a/v media involved
| or not. There seems to be some progress on applying absolute
| timestamps to frames, for example, however, at some point if we
| want to have rocket ships using it (and I do too) we will
| eventually need to have some way to reconcile divergent clocks
| used at different sources!
|
| Sean is modestly not mentioning Pion here, which is the lower
| level library many golang people reach to for webrtc
| components, and deservedly so.
| Sean-Der wrote:
| I need to finish it but 'Reading the SDP' I hope to solve
| with https://pe.pion.ly/ (https://github.com/pion/explainer).
| You can just your Offer/Answer in and interactively explore
| what has been configured.
|
| WebRTC's complexity can be frustrating. I _believe_ it is
| inherent to how many things it is trying to solve. If an
| alternative arrives that solves everything WebRTC does, it
| will end up being just as complex.
|
| Or maybe not! Time will tell.
| adhamsalama wrote:
| I like this book, but it doesn't contain any code examples, so it
| wasn't useful to me.
|
| I ended up adopting code from the High Performance Browser
| Networking book and some code examples by Google that were
| written like 8 years ago. It was painful to replace the outdated
| APIs with new ones and rewrite in TypeScript, but I eventually
| did it.
|
| https://github.com/adhamsalama/webrtc/
|
| Then I used it with WebAssembly to run a distributed SQLite
| database in the browser for peer-to-peer collaboration.
|
| https://github.com/adhamsalama/sqlite-wasm-webrtc
|
| Probably the coolest projects I have ever done, and they contain
| almost no backend code at all (I am a backend dev).
| amelius wrote:
| Can webrtc technology be used to pierce through corporate
| firewalls?
| Sean-Der wrote:
| Yep! ICE lets you try a bunch of different ports and protocols.
|
| So you can have a remote peer and try to contact it via
| UDP/TCP/TLS. You can even attempt via multiple interfaces (Wifi
| and 5G).
|
| You can then measure the packet loss/latency across these
| different paths and figure out which one is best.
| curious_curios wrote:
| Likely yes, via TURN servers.
| dboreham wrote:
| No. It doesn't allow anything that can't be done by a browser
| behind a firewall connecting to a regular web server outside
| the firewall.
| Sean-Der wrote:
| WebRTC can create a NAT Mapping via STUN (UDP).
| https://webrtcforthecurious.com/docs/03-connecting/#nat-
| mapp... that is pretty powerful compared to Client/Server
| HTTP.
|
| Dependent on the firewall, but most I have seen allow NAT
| mapping with different behaviors.
| hnlurker22 wrote:
| Thank you for not calling it WebRTC for Dummies
| pavlov wrote:
| The "for Dummies" branding is a trademark of the publishing
| company Wiley, so you need a contract with them to use it.
| hnlurker22 wrote:
| Tell me you wrote a for dummies book without telling you
| wrote a for dummies book
| quantadev wrote:
| For all those into WebRTC, I just ran across this Reddit topic
| (link below), and the very latest post is one about a Chat App
| that was apparently just completed last week:
|
| https://www.reddit.com/r/WebRTC/comments/1jwwfj5/quanta_chat...
|
| It mentions Nostr, and makes me realize both Nostr and WebRTC can
| work well together. I haven't checked, but I'd guess there are
| Nostr apps using WebRTC to send Nostr messages around. I mean
| Nostr is basically just a crypto-signed JSON object.
___________________________________________________________________
(page generated 2025-04-11 23:00 UTC)