UNPKG

@voxket-ai/voxket-live

Version:

A React widget for embedding Voxket-powered audio/video/chat experiences.

189 lines (188 loc) 5.29 kB
import { Room, LocalParticipant, RemoteParticipant, Track } from 'livekit-client'; import { VoxketEventEmitter } from './event-emitter'; import { VoxketEvents } from '../types/core'; /** * MediaManager * * Manages all media-related functionality including: * - Camera control * - Microphone control * - Screen share control * - Device enumeration * - Track management * - Media permissions */ export declare class MediaManager { private room; private eventEmitter; private silencePreventionNode; private silencePreventionOscillator; private audioContext; private currentFacingMode; constructor(eventEmitter: VoxketEventEmitter<VoxketEvents>); /** * Initialize AudioContext and ensure it's running * This must be called on user interaction to comply with browser autoplay policies */ private initializeAudioContext; /** * Ensure AudioContext is running (call before any audio operations) */ ensureAudioContextRunning(): Promise<void>; /** * Set the room instance for media management */ setRoom(room: Room | null): void; /** * Get local participant */ getLocalParticipant(): LocalParticipant | null; /** * Get remote participants */ getRemoteParticipants(): RemoteParticipant[]; /** * Toggle microphone (if enabled is not specified, it will toggle) */ toggleMicrophone(enabled?: boolean): Promise<void>; /** * Set microphone enabled state */ setMicrophoneEnabled(enabled: boolean): Promise<void>; /** * Start silence prevention by injecting a very low-volume tone * This prevents LiveKit's silence detection from restarting the microphone track */ private startSilencePrevention; /** * Stop silence prevention */ private stopSilencePrevention; /** * Toggle camera (if enabled is not specified, it will toggle) */ toggleCamera(enabled?: boolean): Promise<void>; /** * Set camera enabled state */ setCameraEnabled(enabled: boolean): Promise<void>; /** * Enable camera */ enableCamera(): Promise<void>; /** * Disable camera */ disableCamera(): Promise<void>; /** * Switch between front and rear camera (mobile only). * Enumerates available cameras and explicitly switches to the other camera's * device ID (more reliable than relying on facingMode constraint alone). */ switchCamera(): Promise<void>; /** * Get the current camera facing mode */ getCurrentFacingMode(): 'user' | 'environment'; /** * Start screen share */ startScreenShare(): Promise<void>; /** * Stop screen share */ stopScreenShare(): Promise<void>; /** * Get available audio input devices */ getAudioInputDevices(): Promise<MediaDeviceInfo[]>; /** * Get available video input devices */ getVideoInputDevices(): Promise<MediaDeviceInfo[]>; /** * Set audio input device */ setAudioInputDevice(deviceId: string): Promise<void>; /** * Set video input device */ setVideoInputDevice(deviceId: string): Promise<void>; /** * Get microphone track */ getMicrophoneTrack(): import('livekit-client').LocalTrack<Track.Kind> | null | undefined; /** * Get camera track */ getCameraTrack(): import('livekit-client').LocalTrack<Track.Kind> | null | undefined; /** * Get screen share track */ getScreenShareTrack(): import('livekit-client').LocalTrack<Track.Kind> | null | undefined; /** * Check if microphone is enabled */ get isMicrophoneEnabled(): boolean; /** * Check if camera is enabled */ get isCameraEnabled(): boolean; /** * Check if screen share is enabled */ get isScreenShareEnabled(): boolean; /** * Get agent audio track */ getAgentAudioTrack(): { source: Track.Source; participant: RemoteParticipant; publication: import('livekit-client').RemoteTrackPublication; } | null; /** * Get agent video track */ getAgentVideoTrack(): { source: Track.Source; participant: RemoteParticipant; publication: import('livekit-client').RemoteTrackPublication; } | null; /** * Get all video track refs (local and remote, camera and screen share) */ getVideoTrackRefs(): Array<{ source: Track.Source; participant: any; publication: any; }>; /** * Get camera track refs only */ getCameraTrackRefs(): Array<{ source: Track.Source; participant: any; publication: any; }>; /** * Get screen share track refs only */ getScreenShareTrackRefs(): Array<{ source: Track.Source; participant: any; publication: any; }>; /** * Get publish permissions for various media sources */ getPublishPermissions(): { camera: boolean; microphone: boolean; screenShare: boolean; data: boolean; }; /** * Check if a specific source can be published */ canPublishSource(source: 'camera' | 'microphone' | 'screenShare'): boolean; }