Skip to content

Flow Screen Share

Tobias Vorwachs edited this page Oct 26, 2026 · 1 revision

Part of the Plugin data protocol. Packet: Packet-mumcord-screen. Media transport: Flow-Direct-Connection.

Flow: screen share

One person shares a screen in a channel; other Mumcord users watch. Plugin data only agrees who shares and who watches. Picture and sound flow over a direct connection between sharer and each viewer.

sequenceDiagram
    participant A as Sharer
    participant S as Mumble server
    participant V as Viewer
    A->>S: mumcord.screen share (live)
    S-->>V: relayed to Mumcord users in the channel
    V->>S: watch
    S-->>A: relayed
    alt fewer than 8 viewers
        A->>S: accept
        S-->>V: relayed
        V-->>A: open QUIC stream kind 2 (direct)
        loop while sharing
            A-->>V: frames, video VP9 and Opus audio (direct)
        end
        V-->>A: keyframe request, byte 1 (direct)
        A->>S: viewers (list of sessions)
        S-->>V: relayed
    else already 8 viewers
        A->>S: full
        S-->>V: relayed
    end
    V->>S: unwatch
    S-->>A: relayed
    A->>S: share (live: false) when stopping
    S-->>V: relayed
Loading

Steps

  1. Announce. The sharer sends share with live, paused and sound to every Mumcord user in the channel who announced screen-share. It resends on every change (pause, sound) and sends it to each Mumcord user who comes into the channel later.
  2. Watch. A viewer sends watch to the sharer.
  3. Accept or full. The sharer answers accept while fewer than 8 people watch (MAX_VIEWERS), otherwise full.
  4. Media. After accept, the viewer opens a direct connection to the sharer (see Flow-Direct-Connection) and a stream of kind 2. The sharer writes frames: VP9 video and Opus audio, each with a 20-byte header. The viewer can send the byte 1 to ask for a keyframe (for example after packet loss or when joining); the sharer limits keyframe requests to one per second.
  5. Viewer list. The sharer sends viewers with the sessions currently watching (at most 8) so each viewer knows who else is there. Receivers check the list against the people in the channel.
  6. Stop watching. unwatch ends one viewer's watching.
  7. Stop sharing. The sharer sends share with live: false. Leaving the channel ends the own share and everything the person watched.

Limits and errors

Situation Result
Ninth viewer Gets full; no media.
No direct path or consent declined Media cannot be delivered; there is no plugin data fallback for video.
Frame with another version, an invalid header or a payload above its limit (video 4 MiB, audio 4 KiB) The stream ends.
Picture larger than 7680 x 4320 Rejected.
Sender not in the channel, or a viewers list with strangers Ignored or filtered.
Unknown message type Dropped.

The sharer adapts quality to what the viewers can take (lower resolution and bitrate steps, with a pause before stepping back up); this is local behaviour and not part of the protocol.

Packets used

Packet-mumcord-screen, Packet-mumcord-p2p

Clone this wiki locally