Inspiration
Watching movies together remotely sounds simple until you actually try it. One person shares their screen, someone else says “it’s lagging,” another says “wait, you’re ahead,” and suddenly the whole experience feels scuffed.
Most tools were not built for shared watching. They were built for meetings. That means unnecessary UI, inconsistent quality, and no real control over the viewing experience.
We wanted to build something that feels like sitting on the same couch, not sitting in a Discord call.
What we built
Moovie Night is a lightweight, high performance screen sharing app designed specifically for shared viewing experiences.
Instead of treating screen sharing like a meeting tool, we built it around watching together:
- Low latency screen streaming optimized for video playback
- Host controlled viewing with optional viewer interaction
- Seamless stream handoff so anyone can take over without restarting
- Pause request system so viewers can nudge the host without interrupting
- Audio normalization ("night mode") to balance loud and quiet scenes
The goal is simple. Make remote movie nights feel natural.
How we built it
The system is built around a custom streaming pipeline:
- Screen capture to encoding to transport to client decode to render
- Backend written in Go for performance and concurrency
- Real time transport using WebRTC and Pion for cross platform streaming
- Client side decoding and rendering for flexibility and efficiency
- PC and shared memory layer for fast frame delivery to the UI
We intentionally split responsibilities between sender and receiver so each client fully handles its own decode and render pipeline. This makes the system more scalable and closer to how real streaming apps work.
Challenges we ran into
The hardest part was getting real time video to behave consistently across machines.
- Frame size mismatches. Streaming from a 1080p screen to a lower one caused issues when rendering and displaying.
- Color formats. Differences like BGRx, RGBA, and YUV across systems created rendering inconsistencies
- Latency versus quality tradeoffs. Balancing smooth playback with minimal delay required careful tuning
- Architecture decisions. Initially receivers were too tightly coupled to senders. Refactoring to fully separate pipelines was key
Each issue forced us to think more like a real streaming system rather than a simple screen share tool.
What we learned
- Screen sharing for media is very different from screen sharing for meetings
- Small low level details such as pixel formats and frame padding can completely break the experience
- Decoupling sender and receiver pipelines is critical for scalability and reliability
- WebRTC is powerful, but you still need to handle a lot yourself for a polished experience
What's next for Moovie Time
- Compatability for more devices easily allowing for any device to easily work with our system
- Smarter bitrate adaptation based on network conditions to allow for bad networks to still host or view
- Better sync handling between audio and video
- Mobile support for watching on the go
- Improved encoder tuning for even lower latency
Log in or sign up for Devpost to join the conversation.