/** * useStreamCrafterV2 Hook * React hook 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 UseStreamCrafterV2Options extends IngestControllerConfigV2 { } export interface UseStreamCrafterV2Return { state: IngestState; stateContext: IngestStateContextV2; isStreaming: boolean; isCapturing: boolean; isReconnecting: boolean; error: string | null; mediaStream: MediaStream | null; sources: MediaSource[]; qualityProfile: QualityProfile; setQualityProfile: (profile: QualityProfile) => Promise; reconnectionState: ReconnectionState | null; 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; startStreaming: () => Promise; stopStreaming: () => Promise; getDevices: () => Promise; switchVideoDevice: (deviceId: string) => Promise; switchAudioDevice: (deviceId: string) => Promise; stats: IngestStats | null; getStats: () => Promise; useWebCodecs: boolean; isWebCodecsActive: boolean; isWebCodecsAvailable: boolean; encoderStats: EncoderStats | null; setUseWebCodecs: (enabled: boolean) => void; setEncoderOverrides: (overrides: EncoderOverrides) => void; getController: () => IngestControllerV2 | null; } export declare function useStreamCrafterV2(options: UseStreamCrafterV2Options): UseStreamCrafterV2Return;