import { EventEmitter } from 'events'; import LocalMediaUtils from './LocalMediaUtils'; import { MediaPermission } from './LocalMediaInterfaces'; import type { MediaStreamTrack } from '@cloudflare/react-native-webrtc'; import type { MediaDeviceInfo } from './LocalMediaInterfaces'; import { NativeEventEmitter } from 'react-native'; export declare const broadcastEmitter: NativeEventEmitter; 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, MEDIA_PERMISSION_UPDATE = 6, DEVICE_LIST_UPDATED = 7 } 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; private _pendingScreenShare; currentDevices: { audio?: MediaDeviceInfo; video?: MediaDeviceInfo; speaker?: MediaDeviceInfo; }; permissions: { audio?: MediaPermission; video?: MediaPermission; }; _handleAppStateChange: (nextAppState: any) => void; private configureForeground; constructor(localMediaUtils: LocalMediaUtils); 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 stopScreenShareTracks; removeScreenShareTracks(tracks?: { audio?: boolean; video?: boolean; }): void; private setAudioTrack; private setVideoTrack; private setScreenShareTracks; private onScreenShareEnded; disableAudio(): Promise; enableAudio(): Promise; toggleAudio(): Promise; enableVideo(): Promise; disableVideo(): 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; getAllDevices(): MediaDeviceInfo[]; getCurrentDevices(): { audio?: MediaDeviceInfo; video?: MediaDeviceInfo; speaker?: MediaDeviceInfo; }; getDeviceById(deviceId: string, kind: 'audioinput' | 'audiooutput' | 'videoinput'): MediaDeviceInfo; getAudioDevices(): Promise; getVideoDevices(): Promise; getSpeakerDevices(): Promise<{ deviceId: string; label: string; kind: string; groupId: string; facing: string; toJSON(): any; }[]>; onDeviceChange(changedDevices: { added: MediaDeviceInfo[]; removed: MediaDeviceInfo[]; selectedDevice?: string; }, forceDeviceChange: boolean): Promise; static init(_: any): Promise; emit(event: keyof typeof MediaEvents, ...args: any[]): boolean; on(event: keyof typeof MediaEvents, listener: (...args: any[]) => void): this; destruct(): void; private stopAudioTrack; private stopVideoTrack; } export interface RNLocalMediaHandler { new (): LocalMediaHandler; }