/** * StreamCrafter Context Store V2 * Svelte 5 store for the multi-source ingest controller: * - Multi-source support * - Audio mixing * - Quality switching * - Auto-reconnection */ import { IngestControllerV2, type IngestControllerConfigV2, type IngestState, type IngestStateContextV2, type IngestStats, type CaptureOptions, type ScreenCaptureOptions, type DeviceInfo, type MediaSource, type QualityProfile, type ReconnectionState, type EncoderOverrides } from "@livepeer-frameworks/streamcrafter-core"; export interface EncoderStats { video: { framesEncoded: number; framesPending: number; bytesEncoded: number; lastFrameTime: number; }; audio: { samplesEncoded: number; samplesPending: number; bytesEncoded: number; lastSampleTime: number; }; timestamp: number; } export interface StreamCrafterV2State { state: IngestState; stateContext: IngestStateContextV2; mediaStream: MediaStream | null; sources: MediaSource[]; isStreaming: boolean; isCapturing: boolean; isReconnecting: boolean; error: string | null; stats: IngestStats | null; qualityProfile: QualityProfile; reconnectionState: ReconnectionState | null; useWebCodecs: boolean; isWebCodecsActive: boolean; encoderStats: EncoderStats | null; } export interface StreamCrafterContextV2Store { subscribe: (fn: (state: StreamCrafterV2State) => void) => () => void; initialize: (config: IngestControllerConfigV2) => void; startCamera: (options?: CaptureOptions) => Promise; startScreenShare: (options?: ScreenCaptureOptions) => Promise; addCustomSource: (stream: MediaStream, label: string) => MediaSource; removeSource: (sourceId: string) => void; stopCapture: () => Promise; setSourceVolume: (sourceId: string, volume: number) => void; setSourceMuted: (sourceId: string, muted: boolean) => void; setSourceActive: (sourceId: string, active: boolean) => void; setPrimaryVideoSource: (sourceId: string) => void; setMasterVolume: (volume: number) => void; getMasterVolume: () => number; setQualityProfile: (profile: QualityProfile) => Promise; startStreaming: () => Promise; stopStreaming: () => Promise; getDevices: () => Promise; switchVideoDevice: (deviceId: string) => Promise; switchAudioDevice: (deviceId: string) => Promise; getStats: () => Promise; setUseWebCodecs: (enabled: boolean) => void; setEncoderOverrides: (overrides: EncoderOverrides) => void; getController: () => IngestControllerV2 | null; destroy: () => void; } export declare function createStreamCrafterContextV2(): StreamCrafterContextV2Store; export declare function setStreamCrafterContextV2(store: StreamCrafterContextV2Store): void; export declare function getStreamCrafterContextV2(): StreamCrafterContextV2Store | undefined;