// the find
pion/rtwatch
Watch videos with friends using WebRTC, let the server do the pausing and seeking.
rtwatch uses Pion WebRTC and GStreamer to stream a single video file to multiple viewers simultaneously, with server-controlled playback state — pause/seek affects everyone. It's a proof-of-concept for synchronized co-watching where the server is the only player; clients just receive frames.
Server-side state model is genuinely clever — since only the current frame is pushed over WebRTC, viewers can't skip ahead or cache the file locally, which is useful for DRM-adjacent scenarios. GStreamer's uridecodebin means it handles a wide range of container formats and remote URIs out of the box without you writing demuxing logic. The entire server is a single main.go, so the architecture is easy to audit. Pion is a solid, well-maintained WebRTC stack in Go.
Single video file per server instance — there's no concept of rooms, playlists, or multiple concurrent streams. You'd have to run separate processes per session, which the project offers zero tooling for. GStreamer as a cgo dependency is a real deployment pain: the Docker path breaks on macOS due to host networking restrictions, and the Windows setup requires MinGW64 with manual PATH surgery. No authentication whatsoever — anyone who hits port 8080 can watch and control playback. The project is fundamentally a demo; there's no production path documented for multi-room, auth, or scaling.