Repository navigation
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.
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
-
Announce. The sharer sends
sharewithlive,pausedandsoundto every Mumcord user in the channel who announcedscreen-share. It resends on every change (pause, sound) and sends it to each Mumcord user who comes into the channel later. -
Watch. A viewer sends
watchto the sharer. -
Accept or full. The sharer answers
acceptwhile fewer than 8 people watch (MAX_VIEWERS), otherwisefull. -
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 byte1to ask for a keyframe (for example after packet loss or when joining); the sharer limits keyframe requests to one per second. -
Viewer list. The sharer sends
viewerswith 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. -
Stop watching.
unwatchends one viewer's watching. -
Stop sharing. The sharer sends
sharewithlive: false. Leaving the channel ends the own share and everything the person watched.
| 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.
Mumcord is licensed under the AGPL-3.0 (versions up to 0.1.1: MIT) · Source code · Website · Website source