Drops every source and subscription. The arbiter stays usable (it simply has no sources).
The ids the arbiter would forward right now, best first.
A snapshot of every registered source and whether it is being forwarded, in registration order.
Whether a source id is registered.
Subscribes to structural changes (a source registered, removed, enabled, disabled, picked, focused, or the forwarded set changing). Not called per frame.
An unsubscribe function.
A source offers a frame. It is forwarded to the model only if the source is enabled, among the sources the model should see, and not inside the negotiated pacing interval.
The producing source (it must be registered).
The frame, base64-encoded.
Image MIME type. Defaults to 'image/jpeg'.
true if the frame was sent to the model.
Registers a source, or updates its label/kind if the id is already registered (its recency, enabled state and counters are kept). A newly registered source counts as the most recently STARTED.
The user explicitly picks the source the agent sees (null clears the pick). A pick beats every
other rule. Returns false for an unknown or disabled source (nothing changes).
Marks the CHANNEL whose surface the user is looking at (null clears it): every source registered for that
channel counts as focused, including one that registers after this call (a surface the user is already on
before its first frame). Used by the 'focused' rule alongside SetFocusedSource.
Marks the source whose surface the user is looking at (null clears it). Used by the 'focused' rule.
Turns a source on or off. A disabled source is not a candidate and forwards nothing.
The source.
The new state.
Whether to tell the model. Default true. A caller that sends its own note about the
same change (a channel lowering its exposure) passes false so the model is told once.
false for an unknown source; true otherwise (including "already in that state").
Removes a source. Its explicit pick or focus, if it held one, is cleared.
StaticForThe arbiter for a sink, created on first use. One arbiter per sink is the whole point (a single writer), so every bridge and channel that gets its arbiter this way shares it.
The client (anything satisfying IVideoFrameSink).
Optionaloptions: VideoSourceArbiterOptionsOptions applied only when the arbiter is created.
The per-session arbiter. Obtain the one for a client with VideoSourceArbiter.ForSink so every writer shares it; constructing a second one for the same client would make two writers again.