Other
CompositionStreamControllerAPI
The CLEAN compositional contract — exactly what a track-driven Broadcast reads + a SourceProvider. ZERO
legacy device/mute/pause/disable surface (C9). The 1:1 replacement for the DELETED legacy pair contract,
MINUS its legacy members. BOTH the concrete CompositionStreamController class AND the frozen
MediaStreamControllerAPI satisfy this; the latter ADDS the legacy members on top (so call.broadcast
of a compat controller still typechecks). It is an interface — not the class — so a delegating bridge
stays assignable.
It extends ONLY IEventEmitter<CompositionStreamControllerEvents> (the FULL event map, which includes
source + disposed) and inlines the SourceProvider / Disposable / Serializable NON-emitter members —
extending those interfaces directly would clash on IEventEmitter's methods (each carries its own
narrower event map). The shape is STRUCTURALLY a SourceProvider<MediaStream> + Disposable +
Serializable (asserted in the spec), so it stays assignable everywhere those are required.
interface CompositionStreamControllerAPI {kind: media-stream;}
ViewerAnalyticsEvent
Re-exports the viewer-analytics API. See attachViewerAnalytics.
interface ViewerAnalyticsEvent {event: object;labels: Record<string, string>;}
ViewerAnalyticsOptions
Options for attachViewerAnalytics.
CompositionStreamControllerEvents
The CLEAN compositional events — three, all compositional, ZERO legacy device events (C9). A
track-driven consumer (Broadcast) reads tracksChanged; the player loader + Broadcast read source.
type CompositionStreamControllerEvents = {}
ViewerAnalyticsAction
Re-exports the viewer-analytics API. See attachViewerAnalytics.
type ViewerAnalyticsAction = view_start | view_heartbeat | view_end
ViewerAnalyticsSink
Caller-provided transport. Core builds the event; the sink ships it.
type ViewerAnalyticsSink = object
attachViewerAnalytics
Re-exports the viewer-analytics API. See attachViewerAnalytics.
import { attachViewerAnalytics } from '@video/video-client-core';