[HN Gopher] Show HN: Pion/handoff - Move WebRTC out of browser a...
___________________________________________________________________
Show HN: Pion/handoff - Move WebRTC out of browser and into Go
Author : Sean-Der
Score : 89 points
Date : 2026-04-07 12:01 UTC (11 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| Sean-Der wrote:
| I wrote this to make Reverse Engineering WebRTC services easier.
| Will also let you save/send arbitrary media from WebRTC sessions.
| The idea is you do all your auth/interaction in the browser, but
| then do all WebRTC in Go. So you have lots more control. More to
| do with it, but it is far enough along to share at least.
|
| In the README is an screenshot of sending my webcam, but
| replacing outgoing video with a ffmpeg testsrc. Handoff sits
| between so it can replace with any arbitrary video.
| czbond wrote:
| Interesting and novel project. I don't have anything
| constructive to add, but well done.
| Sean-Der wrote:
| Thanks :)
|
| No better feeling to work on something and hear it is novel!
| So many projects that I think will be useful miss the mark.
| irq-1 wrote:
| Connect it to an AI talking head and you have a customer
| service center - users browsing a store can click to talk
| with 'someone'.
| ikety wrote:
| I've bookmarked your project years ago to attempt implementing
| webrtc fully in a niche programming language. But I think I may
| have vastly underrated how difficult this is.
|
| Have you come across https://github.com/elixir-webrtc/ex_webrtc
| ?
|
| Wasn't sure if they used Pion as a guide
| ericmcer wrote:
| I am kind of a WebRTC noob but... this means after I define my
| input channel (audio track, video, etc.) and establish a peer
| connection I can send data from a different source?
|
| Are there any complications with that or is it kind of on me to
| not confuse the other peer by sending unexpected formats?
| Hakkin wrote:
| Oh, this is interesting. I have been messing around with a
| WebExtension for dumping encoded WebRTC media streams by
| intercepting streams on RTCPeerConnection.addTrack, but it
| doesn't work reliably since the current WebRTC encoded stream
| API(s) only supports a single reader, so if the actual website is
| also using the API, it either breaks the site or it's impossible
| to intercept the media. This seems like a nice workaround, I had
| briefly considered some kind of proxy but I wrote it off since
| WebRTC traffic is encrypted, I never considered proxying the peer
| connection API calls themselves. Pretty clever.
| Sean-Der wrote:
| I can't wait for https://w3c.github.io/webrtc-rtptransport/
| when you talk about pulling vide out seems like the perfect
| fit.
|
| I ended up doing proxy because Google Meet doesn't let me hook
| at any RTCPeerConnection APIs at all. I wanted to send
| synthetic media in, but couldn't get it working. Ending up
| doing a virtual webcam on Linux.
| hparadiz wrote:
| Would be interesting for a Wayland DM to catch this and draw to a
| picture in picture overlay
| Sean-Der wrote:
| Oh yes! I will pull together a demo.
|
| With 'media-send' I can send it out to ffmpeg/GStreamer and
| that does all the heavy lifting
| hparadiz wrote:
| I made a demo recently with my Google home camera using the
| official API https://github.com/hparadiz/camera-notif
|
| But your way of grabbing the stream is so much simpler.
|
| Overlay layer is super new in KDE Plasma is the only problem.
| You can also do v4l2loopback and make it a virtual camera.
| Sean-Der wrote:
| Have you tried doing video + pipewire yet?
|
| I am also using v4l2loopback, but its annoying to juggle
| /dev/video* devices. I wanted to do video stuff in docker
| containers, and it would be amazing if I could do pipewire
| in each container and have no global state.
|
| I couldn't get anything to work in Chromium. FireFox saw
| the device, but video didn't come across.
| hparadiz wrote:
| When you say +pipewire you mean just audio playback? If
| you are pushing video to a picture-in-picture overlay a
| user might expect that so yea you could write to the
| pipewire socket like any other program. It's usually
| fully open for you to do just that.
|
| I use v4l2 regularly with OBS. In order for
| Chrome/Chromium to see it you need to make the device
| before launching Chrome/Chromium. You can start v4l2
| devices automatically by setting a modprobe config for
| your kernel.
|
| My v4l2 notes might be helpful
| http://technex.us/2022/06/v4l2-notes-for-linux/
| esafak wrote:
| Is this a good way to improve performance (frame rate, latency,
| CPU load) ?
| Sean-Der wrote:
| Yea!
|
| * Do video playback out of the browser. You can render a subset
| of frames, use a different pipeline for decode etc...
|
| * Pull video from a different source. Join Google Meet on
| current computer, but stream from another host.
___________________________________________________________________
(page generated 2026-04-07 23:02 UTC)