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

Built With

Share this project:

Updates