@voxket-ai/voxket-live
Version:
A React widget for embedding Voxket-powered audio/video/chat experiences.
189 lines (188 loc) • 5.29 kB
TypeScript
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;
}