import { EventEmitter } from 'events'; import LocalMediaUtils from './LocalMediaUtils'; import { MediaPermission } from './LocalMediaInterfaces'; import type { MediaStreamTrack } from '@dyteinternals/react-native-webrtc'; import type { MediaDeviceInfo } from './LocalMediaInterfaces'; export declare enum MediaEvents { AUDIO_TRACK_CHANGE = 0, VIDEO_TRACK_CHANGE = 1, SCREENSHARE_TRACK_CHANGE = 2, SCREENSHARE_ENDED = 3, DEVICE_CHANGE = 4, SCREENSHARE_STARTED = 5 } export default class LocalMediaHandler extends EventEmitter { #private; audioTrack: MediaStreamTrack; rawAudioTrack: MediaStreamTrack; videoTrack: MediaStreamTrack; rawVideoTrack: MediaStreamTrack; screenShareTracks: { audio?: MediaStreamTrack; video?: MediaStreamTrack; }; audioEnabled: boolean; videoEnabled: boolean; screenShareEnabled: boolean; currentDevices: { audio?: MediaDeviceInfo; video?: MediaDeviceInfo; speaker?: MediaDeviceInfo; }; permissions: { audio?: MediaPermission; video?: MediaPermission; }; _handleAppStateChange: (nextAppState: any) => void; private configureForeground; constructor(localMediaUtils: LocalMediaUtils); destructor(): void; private handlePermissionErrors; private conditionallyRestartAudio; private conditionallyRestartVideo; private shouldReacquireTrack; removeDocumentEventListeners(): Promise; private onUnmute; private removeMediaStreamTrackListeners; private addMediaStreamTrackListeners; setupAudioStream(deviceId?: string, forceStopTrack?: boolean): Promise; private onVisibilityChange; setupVideoStream(deviceId?: string, forceStopTrack?: boolean): Promise; setupSpeaker(deviceId?: string): Promise; getOperationalWebcamDeviceId(): Promise<{ isOperational: boolean; deviceId: string; }>; getOperationalMicDeviceId(): Promise<{ isOperational: boolean; deviceId: string; }>; setupStreams({ audio, video, }: { audio: boolean; video: boolean; }): Promise; private stopAudioTrack; private stopVideoTrack; private stopScreenShareTracks; removeAudioTrack(): void; removeVideoTrack(): void; removeScreenShareTracks(tracks?: { audio?: boolean; video?: boolean; }): void; removeAllTracks(): void; private setAudioTrack; private setVideoTrack; private setScreenShareTracks; private onScreenShareEnded; disableAudio(): void; enableAudio(): Promise; enableVideo(): Promise; disableVideo(): Promise; toggleAudio(): Promise; toggleVideo(): Promise; setAudioDevice(device: MediaDeviceInfo): Promise; setVideoDevice(device: MediaDeviceInfo): Promise; setSpeakerDevice(device?: MediaDeviceInfo): Promise; setDevice(route: MediaDeviceInfo): Promise; private oniOSBroadcastStart; private oniOSBroadcastStop; toggleScreenShare(): Promise; enableScreenShare(): Promise; disableScreenShare(): Promise; destruct(): void; getAllDevices(): MediaDeviceInfo[]; getCurrentDevices(): { audio?: MediaDeviceInfo; video?: MediaDeviceInfo; speaker?: MediaDeviceInfo; }; getDeviceById(deviceId: string, kind: 'audioinput' | 'audiooutput' | 'videoinput'): MediaDeviceInfo; getAudioDevices(): MediaDeviceInfo[]; getVideoDevices(): MediaDeviceInfo[]; getSpeakerDevices(): MediaDeviceInfo[]; onDeviceChange(changedDevices: { added: MediaDeviceInfo[]; removed: MediaDeviceInfo[]; }, forceDeviceChange: boolean): Promise; cleanUpTracks(): void; destructMediaHandler(): Promise; static init(_: any): Promise; emit(event: keyof typeof MediaEvents, ...args: any[]): boolean; on(event: keyof typeof MediaEvents, listener: (...args: any[]) => void): this; } export interface RNLocalMediaHandler { new (): LocalMediaHandler; }