Skip to content

Watch Together

Watch Together lets one user in a channel play a video that is synchronized for everyone else. Play, pause, and seek events propagate to the other viewers.

Shared video playing with three viewers and a sync indicator

Two source kinds are supported by the client today:

  • YouTube, played inside an embedded IFrame.
  • Direct media URL (a .mp4 or .webm URL the client can fetch directly).

Other providers (Vimeo, Twitch, and so on) are not implemented.

The session is fully client-side. The server only relays plugin-data messages between participants:

  • The starter sends a “start” message with the source URL and kind.
  • Each viewer’s app fetches the video from the source directly (the server does not proxy or stream it).
  • Play, pause, and seek actions are broadcast as small plugin-data messages.

There are no server-side MUMBLE_CONFIG_* or plugin.* keys for Watch Together. Disabling it on a server requires building a custom server image.

The video is not streamed through the server. Each client fetches the content directly from YouTube or the URL host. The same caveats apply as for normal browser usage of those sites: the host sees each viewer’s IP.

Some clients require the user to opt in to external embeds before the YouTube IFrame loads. A starter who picks a YouTube URL will see an explanation if their own client has not enabled the opt-in.

  • Out of sync after a long pause: the next play / pause / seek event re-syncs everyone.
  • Video is geo-blocked for some viewers: the server cannot help. The viewer needs a working route to the provider.
  • Direct URL refuses to play: the file must serve Accept-Ranges: bytes and a video MIME type.

Continue with Whiteboard.