@cloudflare/realtimekit-react-native 0.1.4-staging.4 → 0.1.4-staging.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -645,7 +645,10 @@ class LocalMediaHandler extends _events.EventEmitter {
645
645
  if (this.screenShareEnabled && _reactNative.Platform.OS !== 'ios') {
646
646
  this.removeScreenShareTracks();
647
647
  try {
648
- await RTKHelper.stopService();
648
+ const val = await RTKHelper.isForegroundServiceRunning();
649
+ if (val) {
650
+ await RTKHelper.stopService();
651
+ }
649
652
  } catch (e) {
650
653
  console.warn('Failed to stop foreground service', e);
651
654
  }
@@ -664,7 +667,10 @@ class LocalMediaHandler extends _events.EventEmitter {
664
667
  } catch (e) {
665
668
  console.warn('Failed to start screenshare', e);
666
669
  this.screenShareEnabled = false;
667
- await RTKHelper.stopService();
670
+ const val = await RTKHelper.isForegroundServiceRunning();
671
+ if (val) {
672
+ await RTKHelper.stopService();
673
+ }
668
674
  this._pendingScreenShare = false;
669
675
  } finally {
670
676
  this._pendingScreenShare = false;
@@ -1 +1 @@
1
- {"version":3,"names":["_events","require","_LocalMediaUtils","_interopRequireDefault","_reactNative","_BackgroundHandler","_NativeAudioManager","_PermissionHandler","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","_classPrivateFieldInitSpec","a","_checkPrivateRedeclaration","set","has","_classPrivateFieldSet","s","_assertClassBrand","_classPrivateFieldGet","get","n","arguments","length","RTKHelper","BroadcastEventEmitter","NativeModules","broadcastEmitter","NativeEventEmitter","MediaEvents","exports","checkIfAudioTrackIsSilent","track","_localMediaUtils","WeakMap","_appState","_appStateSubscription","_interval","LocalMediaHandler","EventEmitter","configureForeground","Platform","OS","val","isForegroundServiceRunning","Version","res","PermissionsAndroid","request","PERMISSIONS","POST_NOTIFICATIONS","RESULTS","GRANTED","console","warn","createNotificationChannel","startService","constructor","localMediaUtils","nextAppState","match","BackgroundTimer","clearInterval","videoTrack","enabled","setTimeout","screenShareEnabled","_pendingScreenShare","setInterval","audioEnabled","videoEnabled","permissions","audio","video","screenShareTracks","undefined","currentDevices","speaker","onDeviceChange","changedDevices","addListener","oniOSBroadcastStart","oniOSBroadcastStop","InCallManger","start","conditionallyRestartAudio","Promise","race","resolve","_this$audioTrack","audioTrack","addEventListener","reacquireTrack","shouldReacquireTrack","_this$currentDevices$","removeMediaStreamTrackListeners","setupAudioStream","deviceId","addMediaStreamTrackListeners","emit","conditionallyRestartVideo","_this$videoTrack","setupVideoStream","kind","workaroundWebKitBug1208516","mediaStreamTrack","wasEnabled","rawAudioTrack","rawVideoTrack","isStopped","readyState","isInadvertentlyStopped","isSilentAudio","muted","removeDocumentEventListeners","onUnmute","ev","conditionallyRestart","removeEventListener","forceStopTrack","_this$currentDevices$2","audioDevices","getAudioDevices","audioDeviceId","getOperationalMicDeviceId","getDeviceById","_this$audioTrack2","_this$rawAudioTrack","stop","LocalMediaUtils","getAudioTrack","err","setAudioTrack","setDevice","repopulateAvailableDevices","device","onVisibilityChange","_this$currentDevices$3","videoDevices","getVideoDevices","videoDeviceId","getOperationalWebcamDeviceId","videoConstraints","getVideoConstraints","getVideoTrack","setVideoTrack","_this$videoTrack2","_this$rawVideoTrack","setupSpeaker","_this$currentDevices$4","speakerDevices","getSpeakerDevices","lastDeviceIndex","speakerDeviceId","isOperational","reverse","operationalDeviceId","deviceIndex","isSilent","release","setupStreams","permResult","setupPermissions","camera","microphone","message","constraints","AppState","_handleAppStateChange","stopScreenShareTracks","tracks","_this$screenShareTrac","_this$screenShareTrac2","removeScreenShareTracks","_this$screenShareTrac3","onScreenShareEnded","stopAudioTrack","stopVideoTrack","setScreenShareTracks","_this$screenShareTrac4","bind","disableAudio","toggleAudio","enableAudio","_this$currentDevices$5","ex","enableVideo","toggleVideo","disableVideo","_this$currentDevices$6","setAudioDevice","setVideoDevice","setSpeakerDevice","route","chooseAudioRoute","getScreenShareTracks","toggleScreenShare","stopService","RTKScreensharePickerView","showScreenSharePickerView","enableScreenShare","disableScreenShare","getAllDevices","availableDevices","getCurrentDevices","forceDeviceChange","addedDevice","removedDevice","added","removed","init","_","event","args","on","listener","destruct","remove","_err","_this$rawAudioTrack2","_this$audioTrack3","_this$rawAudioTrack3","_this$audioTrack4","_this$rawVideoTrack2","_this$videoTrack3","_this$rawVideoTrack3","_this$videoTrack4"],"sources":["LocalMediaHandler.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { EventEmitter } from 'events';\nimport LocalMediaUtils from './LocalMediaUtils';\nimport {\n RealtimeKitMediaStreamConstraints,\n MediaPermission,\n} from './LocalMediaInterfaces';\nimport type { MediaStreamTrack } from '@cloudflare/react-native-webrtc';\nimport type { MediaDeviceInfo } from './LocalMediaInterfaces';\nimport {\n AppState,\n NativeEventEmitter,\n NativeEventSubscription,\n NativeModules,\n PermissionsAndroid,\n Platform,\n} from 'react-native';\nimport BackgroundTimer from './BackgroundHandler';\nimport InCallManger from './NativeAudioManager';\nimport { setupPermissions } from './PermissionHandler';\n\nconst { RTKHelper, BroadcastEventEmitter } = NativeModules;\n\nconst broadcastEmitter = new NativeEventEmitter(BroadcastEventEmitter);\n\n// eslint-disable-next-line no-shadow\nexport enum MediaEvents {\n AUDIO_TRACK_CHANGE,\n VIDEO_TRACK_CHANGE,\n SCREENSHARE_TRACK_CHANGE,\n SCREENSHARE_ENDED,\n DEVICE_CHANGE,\n SCREENSHARE_STARTED,\n MEDIA_PERMISSION_UPDATE,\n DEVICE_LIST_UPDATED,\n}\n\nfunction checkIfAudioTrackIsSilent(track: MediaStreamTrack) {\n //TODO\n return !!track;\n}\n\nexport default class LocalMediaHandler extends EventEmitter {\n #localMediaUtils: LocalMediaUtils;\n\n #appState: string;\n\n #appStateSubscription: NativeEventSubscription;\n\n #interval: number;\n\n public audioTrack: MediaStreamTrack;\n\n public rawAudioTrack: MediaStreamTrack;\n\n public videoTrack: MediaStreamTrack;\n\n public rawVideoTrack: MediaStreamTrack;\n\n public screenShareTracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n };\n\n public audioEnabled: boolean;\n\n public videoEnabled: boolean;\n\n public screenShareEnabled: boolean;\n\n private _pendingScreenShare = false;\n\n public currentDevices: {\n audio?: MediaDeviceInfo;\n video?: MediaDeviceInfo;\n speaker?: MediaDeviceInfo;\n };\n\n public permissions: {\n audio?: MediaPermission;\n video?: MediaPermission;\n };\n\n _handleAppStateChange = (nextAppState) => {\n if (\n this.#appState.match(/inactive|background/) &&\n nextAppState === 'active'\n ) {\n BackgroundTimer.clearInterval(this.#interval);\n this.#interval = null;\n if (this.videoTrack) {\n this.videoTrack.enabled = false;\n setTimeout(() => {\n if (this.videoTrack) {\n this.videoTrack.enabled = true;\n }\n }, 100);\n }\n } else {\n if (this.#interval === null) {\n if (this.screenShareEnabled || this._pendingScreenShare) {\n this.configureForeground();\n }\n }\n this.#interval = BackgroundTimer.setInterval(() => {}, 1000);\n this.#appState = nextAppState;\n }\n };\n\n private async configureForeground() {\n if (Platform.OS !== 'android') return;\n const val = await RTKHelper.isForegroundServiceRunning();\n if (!val) {\n if ((Platform.Version as number) >= 33) {\n const res = await PermissionsAndroid.request(\n PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS\n );\n if (res !== PermissionsAndroid.RESULTS.GRANTED) {\n console.warn('Permission required for screenshare notification');\n }\n }\n if ((Platform.Version as number) >= 26) {\n await RTKHelper.createNotificationChannel();\n }\n try {\n await RTKHelper.startService();\n } catch (e) {\n console.warn('Failed to start foreground service', e);\n }\n }\n }\n\n public constructor(localMediaUtils: LocalMediaUtils) {\n super();\n this.#localMediaUtils = localMediaUtils;\n this.#appState = '';\n this.audioEnabled = true;\n this.videoEnabled = true;\n this.screenShareEnabled = false;\n this.permissions = { audio: 'NOT_REQUESTED', video: 'NOT_REQUESTED' };\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n // LocalMediaUtils onDeviceChange with callback from native onAudioDeviceChanged events\n this.#localMediaUtils.onDeviceChange(async (changedDevices) => {\n await this.onDeviceChange(changedDevices, false);\n });\n if (Platform.OS === 'ios') {\n broadcastEmitter.addListener('iOS_BroadcastStarted', () => {\n this.oniOSBroadcastStart();\n });\n broadcastEmitter.addListener('iOS_BroadcastStopped', () => {\n this.oniOSBroadcastStop();\n });\n }\n InCallManger.start({});\n }\n\n private async conditionallyRestartAudio() {\n if (!this.currentDevices.audio || !this.audioEnabled) {\n return;\n }\n // log.info('maybe_restart_audio: ');\n await Promise.race([\n new Promise((resolve) =>\n this.audioTrack?.addEventListener('unmute', (e) => {\n resolve(e);\n })\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n const reacquireTrack = await this.shouldReacquireTrack('audio');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.audioTrack);\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n }\n }\n\n private async conditionallyRestartVideo() {\n if (!this.currentDevices.video || !this.videoEnabled) return;\n // log.info('maybe_restart_video');\n\n await Promise.race([\n new Promise((resolve) =>\n this.videoTrack?.addEventListener('unmute', resolve)\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n\n const reacquireTrack = await this.shouldReacquireTrack('video');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.videoTrack);\n await this.setupVideoStream(this.currentDevices.video.deviceId);\n this.addMediaStreamTrackListeners(this.videoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n }\n\n private async shouldReacquireTrack(kind: 'audio' | 'video') {\n const workaroundWebKitBug1208516 = false;\n let mediaStreamTrack: MediaStreamTrack;\n let wasEnabled = false;\n\n if (kind === 'audio') {\n mediaStreamTrack = this.audioTrack;\n wasEnabled = this.audioEnabled;\n } else if (kind === 'video') {\n mediaStreamTrack = this.videoTrack;\n wasEnabled = this.videoEnabled;\n }\n\n if (!mediaStreamTrack) return false;\n if (!this.rawAudioTrack || !this.audioTrack) return true;\n if (!this.rawVideoTrack || !this.videoTrack) return true;\n const isStopped = mediaStreamTrack.readyState === 'ended';\n\n const isInadvertentlyStopped =\n isStopped && wasEnabled && workaroundWebKitBug1208516;\n\n let isSilentAudio = false;\n if (kind === 'audio') {\n isSilentAudio = await checkIfAudioTrackIsSilent(this.audioTrack);\n }\n\n return mediaStreamTrack.muted || isInadvertentlyStopped || isSilentAudio;\n }\n\n public async removeDocumentEventListeners() {}\n\n private onUnmute(ev) {\n // log.info('Track unmuted', ev);\n }\n\n private removeMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return undefined;\n }\n\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.removeEventListener('ended', conditionallyRestart);\n mediaStreamTrack.removeEventListener('mute', conditionallyRestart);\n mediaStreamTrack.removeEventListener('unmute', this.onUnmute);\n return mediaStreamTrack;\n }\n\n private addMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return null;\n }\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.addEventListener('ended', conditionallyRestart);\n mediaStreamTrack.addEventListener('mute', conditionallyRestart);\n mediaStreamTrack.addEventListener('unmute', this.onUnmute);\n\n return mediaStreamTrack;\n }\n\n public async setupAudioStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n\n if (!audioDevices.length) {\n return;\n }\n\n let audioDeviceId = deviceId;\n\n if (!audioDeviceId) {\n audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n }\n\n if (this.currentDevices.audio?.deviceId !== audioDeviceId) {\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n }\n if (forceStopTrack) {\n this.audioTrack?.stop();\n this.rawAudioTrack?.stop();\n }\n try {\n this.rawAudioTrack = await LocalMediaUtils.getAudioTrack();\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n this.rawAudioTrack = undefined;\n }\n this.setAudioTrack(this.rawAudioTrack);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n this.setDevice(this.currentDevices.audio);\n\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.audioTrack && this.permissions.audio === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.audio,\n });\n }\n\n private onVisibilityChange() {\n // pass\n }\n\n public async setupVideoStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return;\n }\n\n let videoDeviceId = deviceId;\n if (!videoDeviceId) {\n videoDeviceId = (await this.getOperationalWebcamDeviceId()).deviceId;\n }\n\n if (this.currentDevices.video?.deviceId !== videoDeviceId) {\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n }\n\n /**\n * NOTE(roerohan): this.videoEnabled is checked, so that upon device change,\n * the video track is not set when the user has turned off his camera.\n */\n if (this.videoEnabled) {\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n if (!this.rawVideoTrack) {\n try {\n this.rawVideoTrack = await LocalMediaUtils.getVideoTrack(\n videoConstraints\n );\n } catch (err) {\n console.warn('Failed to acquire video track: ', err);\n this.rawVideoTrack = undefined;\n }\n }\n this.setVideoTrack(this.rawVideoTrack);\n this.addMediaStreamTrackListeners(this.rawVideoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n\n if (forceStopTrack) {\n this.videoTrack?.stop();\n this.rawVideoTrack?.stop();\n }\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.videoTrack && this.permissions.video === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.video,\n });\n }\n\n public async setupSpeaker(deviceId?: string) {\n const speakerDevices = this.#localMediaUtils.getSpeakerDevices();\n if (!speakerDevices.length) {\n return;\n }\n const lastDeviceIndex = speakerDevices.length - 1;\n const speakerDeviceId =\n deviceId ?? speakerDevices[lastDeviceIndex].deviceId;\n if (this.currentDevices.speaker?.deviceId !== speakerDeviceId) {\n // Audio Input devices are same as output devices in mobile\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n speakerDeviceId,\n 'audioinput'\n );\n this.currentDevices.speaker = this.currentDevices.audio;\n }\n await this.setDevice(this.currentDevices.audio);\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.speaker,\n });\n }\n\n public async getOperationalWebcamDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n videoDevices = [...videoDevices].reverse();\n\n let operationalDeviceId = null;\n for (\n let deviceIndex = 0;\n deviceIndex < videoDevices.length;\n deviceIndex += 1\n ) {\n try {\n operationalDeviceId = videoDevices[deviceIndex].deviceId;\n break;\n } catch (err) {}\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: videoDevices[0].deviceId };\n }\n\n public async getOperationalMicDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let audioDevices = this.#localMediaUtils.getAudioDevices();\n if (!audioDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n audioDevices = [...audioDevices].reverse();\n let operationalDeviceId = null;\n\n for (\n let deviceIndex = 0;\n deviceIndex < audioDevices.length;\n deviceIndex += 1\n ) {\n try {\n const audioTrack = await LocalMediaUtils.getAudioTrack();\n\n const isSilent = await checkIfAudioTrackIsSilent(audioTrack);\n audioTrack.stop();\n audioTrack.release();\n if (!isSilent) {\n operationalDeviceId = audioDevices[deviceIndex].deviceId;\n break;\n }\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n }\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: audioDevices[0].deviceId };\n }\n\n public async setupStreams({\n audio,\n video,\n }: {\n audio: boolean;\n video: boolean;\n }) {\n try {\n const permResult = await setupPermissions(audio, video);\n this.permissions.video = permResult.camera;\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n this.permissions.audio = val.microphone ?? false;\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n const constraints: RealtimeKitMediaStreamConstraints = {};\n if (!this.currentDevices) {\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n }\n if (audio) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n if (audioDevices.length !== 0) {\n const audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n constraints.audio = true;\n }\n }\n\n if (video) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (videoDevices.length !== 0) {\n const videoDeviceId = (await this.getOperationalWebcamDeviceId())\n .deviceId;\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n constraints.video = videoConstraints.video;\n }\n }\n\n if (audio) await this.setupAudioStream();\n if (video) await this.setupVideoStream();\n\n if (this.audioTrack) this.audioEnabled = true;\n else this.audioEnabled = false;\n\n if (this.videoTrack) this.videoEnabled = true;\n else this.videoEnabled = false;\n\n this.screenShareEnabled = false;\n\n // Setting default audio output to speaker\n await this.setupSpeaker();\n\n // Setup Foreground Service after handling permissions\n if (Platform.OS === 'android') {\n this.#appStateSubscription = AppState.addEventListener(\n 'change',\n this._handleAppStateChange\n );\n }\n }\n\n private stopScreenShareTracks(\n tracks: { audio?: boolean; video?: boolean } = {}\n ) {\n const { audio = true, video = true } = tracks;\n if (audio) {\n this.screenShareTracks?.audio?.stop();\n }\n\n if (video) {\n this.screenShareTracks?.video?.stop();\n }\n\n if (audio && video) {\n this.screenShareEnabled = false;\n }\n }\n\n public removeScreenShareTracks(tracks?: {\n audio?: boolean;\n video?: boolean;\n }) {\n this.screenShareTracks.video?.removeEventListener(\n 'ended',\n this.onScreenShareEnded\n );\n this.stopScreenShareTracks(tracks);\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n }\n\n private setAudioTrack(audioTrack: MediaStreamTrack) {\n if (audioTrack === this.audioTrack) {\n return;\n }\n\n if (audioTrack === undefined) {\n this.stopAudioTrack();\n }\n\n this.audioTrack = audioTrack;\n }\n\n private setVideoTrack(videoTrack: MediaStreamTrack) {\n if (videoTrack === this.videoTrack) {\n return;\n }\n\n if (videoTrack === undefined) {\n this.stopVideoTrack();\n }\n\n this.videoTrack = videoTrack;\n }\n\n private setScreenShareTracks(tracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n }) {\n const { audio, video } = tracks;\n // console.log('SetScreenshare called');\n if (!audio || !video) {\n this.stopScreenShareTracks({ audio: !!audio, video: !!video });\n }\n\n this.screenShareTracks = tracks;\n this.screenShareTracks.video?.addEventListener(\n 'ended',\n this.onScreenShareEnded.bind(this)\n );\n }\n\n private onScreenShareEnded() {\n this.emit('SCREENSHARE_ENDED');\n }\n\n public async disableAudio() {\n await this.toggleAudio();\n }\n\n public async enableAudio() {\n await this.toggleAudio();\n }\n\n public async toggleAudio() {\n if (this.permissions.audio !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(true, false);\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.audio = val.microphone ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n this.audioEnabled = false;\n return;\n }\n if (this.audioEnabled) {\n this.audioEnabled = false;\n\n if (this.audioTrack) {\n this.audioTrack.enabled = this.audioEnabled;\n }\n return;\n }\n try {\n /**\n * NOTE (@madhugb): We need to setup new stream,\n * if the audio track is not preset or it has ended\n */\n if (!this.audioTrack || this.audioTrack.readyState === 'ended') {\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n }\n // if we still can't get a track after setting up audio stream\n // do not toggle the audio state\n if (!this.audioTrack) {\n this.audioEnabled = false;\n return;\n }\n this.audioEnabled = true;\n } catch (ex) {\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n if (this.audioTrack) {\n this.audioTrack.enabled = true;\n }\n }\n\n public async enableVideo() {\n await this.toggleVideo();\n }\n\n public async disableVideo() {\n await this.toggleVideo();\n }\n\n public async toggleVideo() {\n if (this.permissions.video !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(false, true);\n this.permissions.video = permResult.camera;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n if (\n this.permissions.video === 'DENIED' ||\n this.permissions.video === 'NOT_REQUESTED'\n ) {\n this.videoEnabled = false;\n return;\n }\n if (this.videoEnabled) {\n this.stopVideoTrack();\n this.videoEnabled = false;\n return;\n }\n /**\n * NOTE(roerohan): The videoEnabled flag is used inside the setupVideoStream method\n * hence it must be set to true first.\n */\n this.videoEnabled = true;\n await this.setupVideoStream(this.currentDevices.video?.deviceId);\n }\n\n public async setAudioDevice(device: MediaDeviceInfo) {\n await this.setupAudioStream(device.deviceId);\n }\n\n public async setVideoDevice(device: MediaDeviceInfo) {\n if (this.videoEnabled) {\n this.stopVideoTrack();\n }\n await this.setupVideoStream(device.deviceId);\n }\n\n public async setSpeakerDevice(device?: MediaDeviceInfo) {\n await this.setupSpeaker(device.deviceId);\n }\n\n public async setDevice(route: MediaDeviceInfo) {\n await this.#localMediaUtils.chooseAudioRoute(route.deviceId);\n }\n\n private async oniOSBroadcastStart() {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n this.emit('SCREENSHARE_TRACK_CHANGE');\n }\n\n private async oniOSBroadcastStop() {\n if (this.screenShareEnabled) {\n this.removeScreenShareTracks();\n this.emit('SCREENSHARE_TRACK_CHANGE');\n return;\n }\n }\n\n public async toggleScreenShare() {\n if (this.screenShareEnabled && Platform.OS !== 'ios') {\n this.removeScreenShareTracks();\n try {\n await RTKHelper.stopService();\n } catch (e) {\n console.warn('Failed to stop foreground service', e);\n }\n return;\n }\n if (Platform.OS === 'ios' && this.screenShareEnabled) {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n return;\n }\n\n if (Platform.OS === 'android') {\n this._pendingScreenShare = true;\n await this.configureForeground();\n try {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n } catch (e) {\n console.warn('Failed to start screenshare', e);\n this.screenShareEnabled = false;\n await RTKHelper.stopService();\n this._pendingScreenShare = false;\n } finally {\n this._pendingScreenShare = false;\n }\n }\n if (Platform.OS === 'ios') {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n }\n }\n\n public async enableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public async disableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public getAllDevices() {\n return this.#localMediaUtils.availableDevices;\n }\n\n public getCurrentDevices() {\n return this.currentDevices;\n }\n\n public getDeviceById(\n deviceId: string,\n kind: 'audioinput' | 'audiooutput' | 'videoinput'\n ) {\n return this.#localMediaUtils.getDeviceById(deviceId, kind);\n }\n\n public getAudioDevices() {\n return this.#localMediaUtils.getAudioDevices();\n }\n\n public getVideoDevices() {\n return this.#localMediaUtils.getVideoDevices();\n }\n\n public getSpeakerDevices() {\n return this.#localMediaUtils.getSpeakerDevices();\n }\n\n public async onDeviceChange(\n changedDevices: {\n added: MediaDeviceInfo[];\n removed: MediaDeviceInfo[];\n },\n forceDeviceChange: boolean\n ) {\n let addedDevice: MediaDeviceInfo;\n let removedDevice: MediaDeviceInfo;\n if (changedDevices.added.length) [addedDevice] = changedDevices.added;\n\n if (changedDevices.removed.length) [removedDevice] = changedDevices.removed;\n\n /**\n * NOTE(roerohan): forceStopTrack is set required to be set to true for firefox.\n * https://stackoverflow.com/questions/59068146/navigator-mediadevices-getusermedia-api-rejecting-with-error-notreadableerror\n * forceStopTrack is the second argument of setupAudioStream and setupVideoStream.\n */\n if (addedDevice) {\n if (addedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker(addedDevice.deviceId);\n } else {\n await this.setupAudioStream(addedDevice.deviceId);\n }\n } else if (addedDevice.kind === 'videoinput') {\n await this.setupVideoStream(addedDevice.deviceId);\n } else if (addedDevice.kind === 'audiooutput') {\n await this.setupSpeaker(addedDevice.deviceId);\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (removedDevice) {\n if (removedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker();\n } else {\n await this.setupAudioStream();\n }\n } else if (removedDevice.kind === 'videoinput') {\n await this.setupVideoStream();\n } else if (removedDevice.kind === 'audiooutput') {\n await this.setupSpeaker();\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (changedDevices.added.length || changedDevices.removed.length) {\n this.emit('DEVICE_LIST_UPDATED', changedDevices);\n }\n }\n\n public static async init(_) {\n const localMediaUtils = await LocalMediaUtils.init();\n return new LocalMediaHandler(localMediaUtils);\n }\n\n public emit(event: keyof typeof MediaEvents, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n public on(\n event: keyof typeof MediaEvents,\n listener: (...args: any[]) => void\n ) {\n return super.on(event, listener);\n }\n\n public destruct() {\n // TODO: Do not remove native broadcast listeners when going OFF_STAGE in webinar\n // this.#localMediaUtils.destruct();\n if (Platform.OS === 'android') this.#appStateSubscription.remove();\n BackgroundTimer.stop();\n try {\n if (Platform.OS === 'android') RTKHelper.stopService();\n } catch (_err) {}\n // InCallManger.stop(undefined);\n }\n\n private stopAudioTrack() {\n this.rawAudioTrack?.stop();\n this.audioTrack?.stop();\n this.rawAudioTrack?.release();\n this.audioTrack?.release();\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n\n private stopVideoTrack() {\n this.rawVideoTrack?.stop();\n this.videoTrack?.stop();\n this.rawVideoTrack?.release();\n this.videoTrack?.release();\n this.videoTrack = undefined;\n this.rawVideoTrack = undefined;\n }\n}\n\nexport interface RNLocalMediaHandler {\n new (): LocalMediaHandler;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_events","require","_LocalMediaUtils","_interopRequireDefault","_reactNative","_BackgroundHandler","_NativeAudioManager","_PermissionHandler","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","_classPrivateFieldInitSpec","a","_checkPrivateRedeclaration","set","has","_classPrivateFieldSet","s","_assertClassBrand","_classPrivateFieldGet","get","n","arguments","length","RTKHelper","BroadcastEventEmitter","NativeModules","broadcastEmitter","NativeEventEmitter","MediaEvents","exports","checkIfAudioTrackIsSilent","track","_localMediaUtils","WeakMap","_appState","_appStateSubscription","_interval","LocalMediaHandler","EventEmitter","configureForeground","Platform","OS","val","isForegroundServiceRunning","Version","res","PermissionsAndroid","request","PERMISSIONS","POST_NOTIFICATIONS","RESULTS","GRANTED","console","warn","createNotificationChannel","startService","constructor","localMediaUtils","nextAppState","match","BackgroundTimer","clearInterval","videoTrack","enabled","setTimeout","screenShareEnabled","_pendingScreenShare","setInterval","audioEnabled","videoEnabled","permissions","audio","video","screenShareTracks","undefined","currentDevices","speaker","onDeviceChange","changedDevices","addListener","oniOSBroadcastStart","oniOSBroadcastStop","InCallManger","start","conditionallyRestartAudio","Promise","race","resolve","_this$audioTrack","audioTrack","addEventListener","reacquireTrack","shouldReacquireTrack","_this$currentDevices$","removeMediaStreamTrackListeners","setupAudioStream","deviceId","addMediaStreamTrackListeners","emit","conditionallyRestartVideo","_this$videoTrack","setupVideoStream","kind","workaroundWebKitBug1208516","mediaStreamTrack","wasEnabled","rawAudioTrack","rawVideoTrack","isStopped","readyState","isInadvertentlyStopped","isSilentAudio","muted","removeDocumentEventListeners","onUnmute","ev","conditionallyRestart","removeEventListener","forceStopTrack","_this$currentDevices$2","audioDevices","getAudioDevices","audioDeviceId","getOperationalMicDeviceId","getDeviceById","_this$audioTrack2","_this$rawAudioTrack","stop","LocalMediaUtils","getAudioTrack","err","setAudioTrack","setDevice","repopulateAvailableDevices","device","onVisibilityChange","_this$currentDevices$3","videoDevices","getVideoDevices","videoDeviceId","getOperationalWebcamDeviceId","videoConstraints","getVideoConstraints","getVideoTrack","setVideoTrack","_this$videoTrack2","_this$rawVideoTrack","setupSpeaker","_this$currentDevices$4","speakerDevices","getSpeakerDevices","lastDeviceIndex","speakerDeviceId","isOperational","reverse","operationalDeviceId","deviceIndex","isSilent","release","setupStreams","permResult","setupPermissions","camera","microphone","message","constraints","AppState","_handleAppStateChange","stopScreenShareTracks","tracks","_this$screenShareTrac","_this$screenShareTrac2","removeScreenShareTracks","_this$screenShareTrac3","onScreenShareEnded","stopAudioTrack","stopVideoTrack","setScreenShareTracks","_this$screenShareTrac4","bind","disableAudio","toggleAudio","enableAudio","_this$currentDevices$5","ex","enableVideo","toggleVideo","disableVideo","_this$currentDevices$6","setAudioDevice","setVideoDevice","setSpeakerDevice","route","chooseAudioRoute","getScreenShareTracks","toggleScreenShare","stopService","RTKScreensharePickerView","showScreenSharePickerView","enableScreenShare","disableScreenShare","getAllDevices","availableDevices","getCurrentDevices","forceDeviceChange","addedDevice","removedDevice","added","removed","init","_","event","args","on","listener","destruct","remove","_err","_this$rawAudioTrack2","_this$audioTrack3","_this$rawAudioTrack3","_this$audioTrack4","_this$rawVideoTrack2","_this$videoTrack3","_this$rawVideoTrack3","_this$videoTrack4"],"sources":["LocalMediaHandler.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { EventEmitter } from 'events';\nimport LocalMediaUtils from './LocalMediaUtils';\nimport {\n RealtimeKitMediaStreamConstraints,\n MediaPermission,\n} from './LocalMediaInterfaces';\nimport type { MediaStreamTrack } from '@cloudflare/react-native-webrtc';\nimport type { MediaDeviceInfo } from './LocalMediaInterfaces';\nimport {\n AppState,\n NativeEventEmitter,\n NativeEventSubscription,\n NativeModules,\n PermissionsAndroid,\n Platform,\n} from 'react-native';\nimport BackgroundTimer from './BackgroundHandler';\nimport InCallManger from './NativeAudioManager';\nimport { setupPermissions } from './PermissionHandler';\n\nconst { RTKHelper, BroadcastEventEmitter } = NativeModules;\n\nconst broadcastEmitter = new NativeEventEmitter(BroadcastEventEmitter);\n\n// eslint-disable-next-line no-shadow\nexport enum MediaEvents {\n AUDIO_TRACK_CHANGE,\n VIDEO_TRACK_CHANGE,\n SCREENSHARE_TRACK_CHANGE,\n SCREENSHARE_ENDED,\n DEVICE_CHANGE,\n SCREENSHARE_STARTED,\n MEDIA_PERMISSION_UPDATE,\n DEVICE_LIST_UPDATED,\n}\n\nfunction checkIfAudioTrackIsSilent(track: MediaStreamTrack) {\n //TODO\n return !!track;\n}\n\nexport default class LocalMediaHandler extends EventEmitter {\n #localMediaUtils: LocalMediaUtils;\n\n #appState: string;\n\n #appStateSubscription: NativeEventSubscription;\n\n #interval: number;\n\n public audioTrack: MediaStreamTrack;\n\n public rawAudioTrack: MediaStreamTrack;\n\n public videoTrack: MediaStreamTrack;\n\n public rawVideoTrack: MediaStreamTrack;\n\n public screenShareTracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n };\n\n public audioEnabled: boolean;\n\n public videoEnabled: boolean;\n\n public screenShareEnabled: boolean;\n\n private _pendingScreenShare = false;\n\n public currentDevices: {\n audio?: MediaDeviceInfo;\n video?: MediaDeviceInfo;\n speaker?: MediaDeviceInfo;\n };\n\n public permissions: {\n audio?: MediaPermission;\n video?: MediaPermission;\n };\n\n _handleAppStateChange = (nextAppState) => {\n if (\n this.#appState.match(/inactive|background/) &&\n nextAppState === 'active'\n ) {\n BackgroundTimer.clearInterval(this.#interval);\n this.#interval = null;\n if (this.videoTrack) {\n this.videoTrack.enabled = false;\n setTimeout(() => {\n if (this.videoTrack) {\n this.videoTrack.enabled = true;\n }\n }, 100);\n }\n } else {\n if (this.#interval === null) {\n if (this.screenShareEnabled || this._pendingScreenShare) {\n this.configureForeground();\n }\n }\n this.#interval = BackgroundTimer.setInterval(() => {}, 1000);\n this.#appState = nextAppState;\n }\n };\n\n private async configureForeground() {\n if (Platform.OS !== 'android') return;\n const val = await RTKHelper.isForegroundServiceRunning();\n if (!val) {\n if ((Platform.Version as number) >= 33) {\n const res = await PermissionsAndroid.request(\n PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS\n );\n if (res !== PermissionsAndroid.RESULTS.GRANTED) {\n console.warn('Permission required for screenshare notification');\n }\n }\n if ((Platform.Version as number) >= 26) {\n await RTKHelper.createNotificationChannel();\n }\n try {\n await RTKHelper.startService();\n } catch (e) {\n console.warn('Failed to start foreground service', e);\n }\n }\n }\n\n public constructor(localMediaUtils: LocalMediaUtils) {\n super();\n this.#localMediaUtils = localMediaUtils;\n this.#appState = '';\n this.audioEnabled = true;\n this.videoEnabled = true;\n this.screenShareEnabled = false;\n this.permissions = { audio: 'NOT_REQUESTED', video: 'NOT_REQUESTED' };\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n // LocalMediaUtils onDeviceChange with callback from native onAudioDeviceChanged events\n this.#localMediaUtils.onDeviceChange(async (changedDevices) => {\n await this.onDeviceChange(changedDevices, false);\n });\n if (Platform.OS === 'ios') {\n broadcastEmitter.addListener('iOS_BroadcastStarted', () => {\n this.oniOSBroadcastStart();\n });\n broadcastEmitter.addListener('iOS_BroadcastStopped', () => {\n this.oniOSBroadcastStop();\n });\n }\n InCallManger.start({});\n }\n\n private async conditionallyRestartAudio() {\n if (!this.currentDevices.audio || !this.audioEnabled) {\n return;\n }\n // log.info('maybe_restart_audio: ');\n await Promise.race([\n new Promise((resolve) =>\n this.audioTrack?.addEventListener('unmute', (e) => {\n resolve(e);\n })\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n const reacquireTrack = await this.shouldReacquireTrack('audio');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.audioTrack);\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n }\n }\n\n private async conditionallyRestartVideo() {\n if (!this.currentDevices.video || !this.videoEnabled) return;\n // log.info('maybe_restart_video');\n\n await Promise.race([\n new Promise((resolve) =>\n this.videoTrack?.addEventListener('unmute', resolve)\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n\n const reacquireTrack = await this.shouldReacquireTrack('video');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.videoTrack);\n await this.setupVideoStream(this.currentDevices.video.deviceId);\n this.addMediaStreamTrackListeners(this.videoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n }\n\n private async shouldReacquireTrack(kind: 'audio' | 'video') {\n const workaroundWebKitBug1208516 = false;\n let mediaStreamTrack: MediaStreamTrack;\n let wasEnabled = false;\n\n if (kind === 'audio') {\n mediaStreamTrack = this.audioTrack;\n wasEnabled = this.audioEnabled;\n } else if (kind === 'video') {\n mediaStreamTrack = this.videoTrack;\n wasEnabled = this.videoEnabled;\n }\n\n if (!mediaStreamTrack) return false;\n if (!this.rawAudioTrack || !this.audioTrack) return true;\n if (!this.rawVideoTrack || !this.videoTrack) return true;\n const isStopped = mediaStreamTrack.readyState === 'ended';\n\n const isInadvertentlyStopped =\n isStopped && wasEnabled && workaroundWebKitBug1208516;\n\n let isSilentAudio = false;\n if (kind === 'audio') {\n isSilentAudio = await checkIfAudioTrackIsSilent(this.audioTrack);\n }\n\n return mediaStreamTrack.muted || isInadvertentlyStopped || isSilentAudio;\n }\n\n public async removeDocumentEventListeners() {}\n\n private onUnmute(ev) {\n // log.info('Track unmuted', ev);\n }\n\n private removeMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return undefined;\n }\n\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.removeEventListener('ended', conditionallyRestart);\n mediaStreamTrack.removeEventListener('mute', conditionallyRestart);\n mediaStreamTrack.removeEventListener('unmute', this.onUnmute);\n return mediaStreamTrack;\n }\n\n private addMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return null;\n }\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.addEventListener('ended', conditionallyRestart);\n mediaStreamTrack.addEventListener('mute', conditionallyRestart);\n mediaStreamTrack.addEventListener('unmute', this.onUnmute);\n\n return mediaStreamTrack;\n }\n\n public async setupAudioStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n\n if (!audioDevices.length) {\n return;\n }\n\n let audioDeviceId = deviceId;\n\n if (!audioDeviceId) {\n audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n }\n\n if (this.currentDevices.audio?.deviceId !== audioDeviceId) {\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n }\n if (forceStopTrack) {\n this.audioTrack?.stop();\n this.rawAudioTrack?.stop();\n }\n try {\n this.rawAudioTrack = await LocalMediaUtils.getAudioTrack();\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n this.rawAudioTrack = undefined;\n }\n this.setAudioTrack(this.rawAudioTrack);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n this.setDevice(this.currentDevices.audio);\n\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.audioTrack && this.permissions.audio === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.audio,\n });\n }\n\n private onVisibilityChange() {\n // pass\n }\n\n public async setupVideoStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return;\n }\n\n let videoDeviceId = deviceId;\n if (!videoDeviceId) {\n videoDeviceId = (await this.getOperationalWebcamDeviceId()).deviceId;\n }\n\n if (this.currentDevices.video?.deviceId !== videoDeviceId) {\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n }\n\n /**\n * NOTE(roerohan): this.videoEnabled is checked, so that upon device change,\n * the video track is not set when the user has turned off his camera.\n */\n if (this.videoEnabled) {\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n if (!this.rawVideoTrack) {\n try {\n this.rawVideoTrack = await LocalMediaUtils.getVideoTrack(\n videoConstraints\n );\n } catch (err) {\n console.warn('Failed to acquire video track: ', err);\n this.rawVideoTrack = undefined;\n }\n }\n this.setVideoTrack(this.rawVideoTrack);\n this.addMediaStreamTrackListeners(this.rawVideoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n\n if (forceStopTrack) {\n this.videoTrack?.stop();\n this.rawVideoTrack?.stop();\n }\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.videoTrack && this.permissions.video === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.video,\n });\n }\n\n public async setupSpeaker(deviceId?: string) {\n const speakerDevices = this.#localMediaUtils.getSpeakerDevices();\n if (!speakerDevices.length) {\n return;\n }\n const lastDeviceIndex = speakerDevices.length - 1;\n const speakerDeviceId =\n deviceId ?? speakerDevices[lastDeviceIndex].deviceId;\n if (this.currentDevices.speaker?.deviceId !== speakerDeviceId) {\n // Audio Input devices are same as output devices in mobile\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n speakerDeviceId,\n 'audioinput'\n );\n this.currentDevices.speaker = this.currentDevices.audio;\n }\n await this.setDevice(this.currentDevices.audio);\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.speaker,\n });\n }\n\n public async getOperationalWebcamDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n videoDevices = [...videoDevices].reverse();\n\n let operationalDeviceId = null;\n for (\n let deviceIndex = 0;\n deviceIndex < videoDevices.length;\n deviceIndex += 1\n ) {\n try {\n operationalDeviceId = videoDevices[deviceIndex].deviceId;\n break;\n } catch (err) {}\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: videoDevices[0].deviceId };\n }\n\n public async getOperationalMicDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let audioDevices = this.#localMediaUtils.getAudioDevices();\n if (!audioDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n audioDevices = [...audioDevices].reverse();\n let operationalDeviceId = null;\n\n for (\n let deviceIndex = 0;\n deviceIndex < audioDevices.length;\n deviceIndex += 1\n ) {\n try {\n const audioTrack = await LocalMediaUtils.getAudioTrack();\n\n const isSilent = await checkIfAudioTrackIsSilent(audioTrack);\n audioTrack.stop();\n audioTrack.release();\n if (!isSilent) {\n operationalDeviceId = audioDevices[deviceIndex].deviceId;\n break;\n }\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n }\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: audioDevices[0].deviceId };\n }\n\n public async setupStreams({\n audio,\n video,\n }: {\n audio: boolean;\n video: boolean;\n }) {\n try {\n const permResult = await setupPermissions(audio, video);\n this.permissions.video = permResult.camera;\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n this.permissions.audio = val.microphone ?? false;\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n const constraints: RealtimeKitMediaStreamConstraints = {};\n if (!this.currentDevices) {\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n }\n if (audio) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n if (audioDevices.length !== 0) {\n const audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n constraints.audio = true;\n }\n }\n\n if (video) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (videoDevices.length !== 0) {\n const videoDeviceId = (await this.getOperationalWebcamDeviceId())\n .deviceId;\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n constraints.video = videoConstraints.video;\n }\n }\n\n if (audio) await this.setupAudioStream();\n if (video) await this.setupVideoStream();\n\n if (this.audioTrack) this.audioEnabled = true;\n else this.audioEnabled = false;\n\n if (this.videoTrack) this.videoEnabled = true;\n else this.videoEnabled = false;\n\n this.screenShareEnabled = false;\n\n // Setting default audio output to speaker\n await this.setupSpeaker();\n\n // Setup Foreground Service after handling permissions\n if (Platform.OS === 'android') {\n this.#appStateSubscription = AppState.addEventListener(\n 'change',\n this._handleAppStateChange\n );\n }\n }\n\n private stopScreenShareTracks(\n tracks: { audio?: boolean; video?: boolean } = {}\n ) {\n const { audio = true, video = true } = tracks;\n if (audio) {\n this.screenShareTracks?.audio?.stop();\n }\n\n if (video) {\n this.screenShareTracks?.video?.stop();\n }\n\n if (audio && video) {\n this.screenShareEnabled = false;\n }\n }\n\n public removeScreenShareTracks(tracks?: {\n audio?: boolean;\n video?: boolean;\n }) {\n this.screenShareTracks.video?.removeEventListener(\n 'ended',\n this.onScreenShareEnded\n );\n this.stopScreenShareTracks(tracks);\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n }\n\n private setAudioTrack(audioTrack: MediaStreamTrack) {\n if (audioTrack === this.audioTrack) {\n return;\n }\n\n if (audioTrack === undefined) {\n this.stopAudioTrack();\n }\n\n this.audioTrack = audioTrack;\n }\n\n private setVideoTrack(videoTrack: MediaStreamTrack) {\n if (videoTrack === this.videoTrack) {\n return;\n }\n\n if (videoTrack === undefined) {\n this.stopVideoTrack();\n }\n\n this.videoTrack = videoTrack;\n }\n\n private setScreenShareTracks(tracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n }) {\n const { audio, video } = tracks;\n // console.log('SetScreenshare called');\n if (!audio || !video) {\n this.stopScreenShareTracks({ audio: !!audio, video: !!video });\n }\n\n this.screenShareTracks = tracks;\n this.screenShareTracks.video?.addEventListener(\n 'ended',\n this.onScreenShareEnded.bind(this)\n );\n }\n\n private onScreenShareEnded() {\n this.emit('SCREENSHARE_ENDED');\n }\n\n public async disableAudio() {\n await this.toggleAudio();\n }\n\n public async enableAudio() {\n await this.toggleAudio();\n }\n\n public async toggleAudio() {\n if (this.permissions.audio !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(true, false);\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.audio = val.microphone ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n this.audioEnabled = false;\n return;\n }\n if (this.audioEnabled) {\n this.audioEnabled = false;\n\n if (this.audioTrack) {\n this.audioTrack.enabled = this.audioEnabled;\n }\n return;\n }\n try {\n /**\n * NOTE (@madhugb): We need to setup new stream,\n * if the audio track is not preset or it has ended\n */\n if (!this.audioTrack || this.audioTrack.readyState === 'ended') {\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n }\n // if we still can't get a track after setting up audio stream\n // do not toggle the audio state\n if (!this.audioTrack) {\n this.audioEnabled = false;\n return;\n }\n this.audioEnabled = true;\n } catch (ex) {\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n if (this.audioTrack) {\n this.audioTrack.enabled = true;\n }\n }\n\n public async enableVideo() {\n await this.toggleVideo();\n }\n\n public async disableVideo() {\n await this.toggleVideo();\n }\n\n public async toggleVideo() {\n if (this.permissions.video !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(false, true);\n this.permissions.video = permResult.camera;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n if (\n this.permissions.video === 'DENIED' ||\n this.permissions.video === 'NOT_REQUESTED'\n ) {\n this.videoEnabled = false;\n return;\n }\n if (this.videoEnabled) {\n this.stopVideoTrack();\n this.videoEnabled = false;\n return;\n }\n /**\n * NOTE(roerohan): The videoEnabled flag is used inside the setupVideoStream method\n * hence it must be set to true first.\n */\n this.videoEnabled = true;\n await this.setupVideoStream(this.currentDevices.video?.deviceId);\n }\n\n public async setAudioDevice(device: MediaDeviceInfo) {\n await this.setupAudioStream(device.deviceId);\n }\n\n public async setVideoDevice(device: MediaDeviceInfo) {\n if (this.videoEnabled) {\n this.stopVideoTrack();\n }\n await this.setupVideoStream(device.deviceId);\n }\n\n public async setSpeakerDevice(device?: MediaDeviceInfo) {\n await this.setupSpeaker(device.deviceId);\n }\n\n public async setDevice(route: MediaDeviceInfo) {\n await this.#localMediaUtils.chooseAudioRoute(route.deviceId);\n }\n\n private async oniOSBroadcastStart() {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n this.emit('SCREENSHARE_TRACK_CHANGE');\n }\n\n private async oniOSBroadcastStop() {\n if (this.screenShareEnabled) {\n this.removeScreenShareTracks();\n this.emit('SCREENSHARE_TRACK_CHANGE');\n return;\n }\n }\n\n public async toggleScreenShare() {\n if (this.screenShareEnabled && Platform.OS !== 'ios') {\n this.removeScreenShareTracks();\n try {\n const val = await RTKHelper.isForegroundServiceRunning();\n if (val) {\n await RTKHelper.stopService();\n }\n } catch (e) {\n console.warn('Failed to stop foreground service', e);\n }\n return;\n }\n if (Platform.OS === 'ios' && this.screenShareEnabled) {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n return;\n }\n\n if (Platform.OS === 'android') {\n this._pendingScreenShare = true;\n await this.configureForeground();\n try {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n } catch (e) {\n console.warn('Failed to start screenshare', e);\n this.screenShareEnabled = false;\n const val = await RTKHelper.isForegroundServiceRunning();\n if (val) {\n await RTKHelper.stopService();\n }\n this._pendingScreenShare = false;\n } finally {\n this._pendingScreenShare = false;\n }\n }\n if (Platform.OS === 'ios') {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n }\n }\n\n public async enableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public async disableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public getAllDevices() {\n return this.#localMediaUtils.availableDevices;\n }\n\n public getCurrentDevices() {\n return this.currentDevices;\n }\n\n public getDeviceById(\n deviceId: string,\n kind: 'audioinput' | 'audiooutput' | 'videoinput'\n ) {\n return this.#localMediaUtils.getDeviceById(deviceId, kind);\n }\n\n public getAudioDevices() {\n return this.#localMediaUtils.getAudioDevices();\n }\n\n public getVideoDevices() {\n return this.#localMediaUtils.getVideoDevices();\n }\n\n public getSpeakerDevices() {\n return this.#localMediaUtils.getSpeakerDevices();\n }\n\n public async onDeviceChange(\n changedDevices: {\n added: MediaDeviceInfo[];\n removed: MediaDeviceInfo[];\n },\n forceDeviceChange: boolean\n ) {\n let addedDevice: MediaDeviceInfo;\n let removedDevice: MediaDeviceInfo;\n if (changedDevices.added.length) [addedDevice] = changedDevices.added;\n\n if (changedDevices.removed.length) [removedDevice] = changedDevices.removed;\n\n /**\n * NOTE(roerohan): forceStopTrack is set required to be set to true for firefox.\n * https://stackoverflow.com/questions/59068146/navigator-mediadevices-getusermedia-api-rejecting-with-error-notreadableerror\n * forceStopTrack is the second argument of setupAudioStream and setupVideoStream.\n */\n if (addedDevice) {\n if (addedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker(addedDevice.deviceId);\n } else {\n await this.setupAudioStream(addedDevice.deviceId);\n }\n } else if (addedDevice.kind === 'videoinput') {\n await this.setupVideoStream(addedDevice.deviceId);\n } else if (addedDevice.kind === 'audiooutput') {\n await this.setupSpeaker(addedDevice.deviceId);\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (removedDevice) {\n if (removedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker();\n } else {\n await this.setupAudioStream();\n }\n } else if (removedDevice.kind === 'videoinput') {\n await this.setupVideoStream();\n } else if (removedDevice.kind === 'audiooutput') {\n await this.setupSpeaker();\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (changedDevices.added.length || changedDevices.removed.length) {\n this.emit('DEVICE_LIST_UPDATED', changedDevices);\n }\n }\n\n public static async init(_) {\n const localMediaUtils = await LocalMediaUtils.init();\n return new LocalMediaHandler(localMediaUtils);\n }\n\n public emit(event: keyof typeof MediaEvents, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n public on(\n event: keyof typeof MediaEvents,\n listener: (...args: any[]) => void\n ) {\n return super.on(event, listener);\n }\n\n public destruct() {\n // TODO: Do not remove native broadcast listeners when going OFF_STAGE in webinar\n // this.#localMediaUtils.destruct();\n if (Platform.OS === 'android') this.#appStateSubscription.remove();\n BackgroundTimer.stop();\n try {\n if (Platform.OS === 'android') RTKHelper.stopService();\n } catch (_err) {}\n // InCallManger.stop(undefined);\n }\n\n private stopAudioTrack() {\n this.rawAudioTrack?.stop();\n this.audioTrack?.stop();\n this.rawAudioTrack?.release();\n this.audioTrack?.release();\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n\n private stopVideoTrack() {\n this.rawVideoTrack?.stop();\n this.videoTrack?.stop();\n this.rawVideoTrack?.release();\n this.videoTrack?.release();\n this.videoTrack = undefined;\n this.rawVideoTrack = undefined;\n }\n}\n\nexport interface RNLocalMediaHandler {\n new (): LocalMediaHandler;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.SDK_VERSION = void 0;
7
- const SDK_VERSION = exports.SDK_VERSION = '0.1.4-staging.4';
7
+ const SDK_VERSION = exports.SDK_VERSION = '0.1.4-staging.5';
8
8
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SDK_VERSION","exports"],"sources":["version.ts"],"sourcesContent":["export const SDK_VERSION = '0.1.4-staging.4';\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,iBAAiB","ignoreList":[]}
1
+ {"version":3,"names":["SDK_VERSION","exports"],"sources":["version.ts"],"sourcesContent":["export const SDK_VERSION = '0.1.4-staging.5';\n"],"mappings":";;;;;;AAAO,MAAMA,WAAW,GAAAC,OAAA,CAAAD,WAAA,GAAG,iBAAiB","ignoreList":[]}
@@ -639,7 +639,10 @@ export default class LocalMediaHandler extends EventEmitter {
639
639
  if (this.screenShareEnabled && Platform.OS !== 'ios') {
640
640
  this.removeScreenShareTracks();
641
641
  try {
642
- await RTKHelper.stopService();
642
+ const val = await RTKHelper.isForegroundServiceRunning();
643
+ if (val) {
644
+ await RTKHelper.stopService();
645
+ }
643
646
  } catch (e) {
644
647
  console.warn('Failed to stop foreground service', e);
645
648
  }
@@ -658,7 +661,10 @@ export default class LocalMediaHandler extends EventEmitter {
658
661
  } catch (e) {
659
662
  console.warn('Failed to start screenshare', e);
660
663
  this.screenShareEnabled = false;
661
- await RTKHelper.stopService();
664
+ const val = await RTKHelper.isForegroundServiceRunning();
665
+ if (val) {
666
+ await RTKHelper.stopService();
667
+ }
662
668
  this._pendingScreenShare = false;
663
669
  } finally {
664
670
  this._pendingScreenShare = false;
@@ -1 +1 @@
1
- {"version":3,"names":["EventEmitter","LocalMediaUtils","AppState","NativeEventEmitter","NativeModules","PermissionsAndroid","Platform","BackgroundTimer","InCallManger","setupPermissions","RTKHelper","BroadcastEventEmitter","broadcastEmitter","MediaEvents","checkIfAudioTrackIsSilent","track","_localMediaUtils","WeakMap","_appState","_appStateSubscription","_interval","LocalMediaHandler","configureForeground","OS","val","isForegroundServiceRunning","Version","res","request","PERMISSIONS","POST_NOTIFICATIONS","RESULTS","GRANTED","console","warn","createNotificationChannel","startService","e","constructor","localMediaUtils","_classPrivateFieldInitSpec","_defineProperty","nextAppState","_classPrivateFieldGet","match","clearInterval","_classPrivateFieldSet","videoTrack","enabled","setTimeout","screenShareEnabled","_pendingScreenShare","setInterval","audioEnabled","videoEnabled","permissions","audio","video","screenShareTracks","undefined","currentDevices","speaker","onDeviceChange","changedDevices","addListener","oniOSBroadcastStart","oniOSBroadcastStop","start","conditionallyRestartAudio","Promise","race","resolve","_this$audioTrack","audioTrack","addEventListener","reacquireTrack","shouldReacquireTrack","_this$currentDevices$","removeMediaStreamTrackListeners","setupAudioStream","deviceId","addMediaStreamTrackListeners","emit","conditionallyRestartVideo","_this$videoTrack","setupVideoStream","kind","workaroundWebKitBug1208516","mediaStreamTrack","wasEnabled","rawAudioTrack","rawVideoTrack","isStopped","readyState","isInadvertentlyStopped","isSilentAudio","muted","removeDocumentEventListeners","onUnmute","ev","conditionallyRestart","removeEventListener","forceStopTrack","_this$currentDevices$2","audioDevices","getAudioDevices","length","audioDeviceId","getOperationalMicDeviceId","getDeviceById","_this$audioTrack2","_this$rawAudioTrack","stop","getAudioTrack","err","setAudioTrack","setDevice","repopulateAvailableDevices","device","onVisibilityChange","_this$currentDevices$3","videoDevices","getVideoDevices","videoDeviceId","getOperationalWebcamDeviceId","videoConstraints","getVideoConstraints","getVideoTrack","setVideoTrack","_this$videoTrack2","_this$rawVideoTrack","setupSpeaker","_this$currentDevices$4","speakerDevices","getSpeakerDevices","lastDeviceIndex","speakerDeviceId","isOperational","reverse","operationalDeviceId","deviceIndex","isSilent","release","setupStreams","permResult","camera","microphone","message","constraints","_handleAppStateChange","stopScreenShareTracks","tracks","_this$screenShareTrac","_this$screenShareTrac2","removeScreenShareTracks","_this$screenShareTrac3","onScreenShareEnded","stopAudioTrack","stopVideoTrack","setScreenShareTracks","_this$screenShareTrac4","bind","disableAudio","toggleAudio","enableAudio","_this$currentDevices$5","ex","enableVideo","toggleVideo","disableVideo","_this$currentDevices$6","setAudioDevice","setVideoDevice","setSpeakerDevice","route","chooseAudioRoute","getScreenShareTracks","toggleScreenShare","stopService","RTKScreensharePickerView","showScreenSharePickerView","enableScreenShare","disableScreenShare","getAllDevices","availableDevices","getCurrentDevices","forceDeviceChange","addedDevice","removedDevice","added","removed","init","_","event","args","on","listener","destruct","remove","_err","_this$rawAudioTrack2","_this$audioTrack3","_this$rawAudioTrack3","_this$audioTrack4","_this$rawVideoTrack2","_this$videoTrack3","_this$rawVideoTrack3","_this$videoTrack4"],"sources":["LocalMediaHandler.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { EventEmitter } from 'events';\nimport LocalMediaUtils from './LocalMediaUtils';\nimport {\n RealtimeKitMediaStreamConstraints,\n MediaPermission,\n} from './LocalMediaInterfaces';\nimport type { MediaStreamTrack } from '@cloudflare/react-native-webrtc';\nimport type { MediaDeviceInfo } from './LocalMediaInterfaces';\nimport {\n AppState,\n NativeEventEmitter,\n NativeEventSubscription,\n NativeModules,\n PermissionsAndroid,\n Platform,\n} from 'react-native';\nimport BackgroundTimer from './BackgroundHandler';\nimport InCallManger from './NativeAudioManager';\nimport { setupPermissions } from './PermissionHandler';\n\nconst { RTKHelper, BroadcastEventEmitter } = NativeModules;\n\nconst broadcastEmitter = new NativeEventEmitter(BroadcastEventEmitter);\n\n// eslint-disable-next-line no-shadow\nexport enum MediaEvents {\n AUDIO_TRACK_CHANGE,\n VIDEO_TRACK_CHANGE,\n SCREENSHARE_TRACK_CHANGE,\n SCREENSHARE_ENDED,\n DEVICE_CHANGE,\n SCREENSHARE_STARTED,\n MEDIA_PERMISSION_UPDATE,\n DEVICE_LIST_UPDATED,\n}\n\nfunction checkIfAudioTrackIsSilent(track: MediaStreamTrack) {\n //TODO\n return !!track;\n}\n\nexport default class LocalMediaHandler extends EventEmitter {\n #localMediaUtils: LocalMediaUtils;\n\n #appState: string;\n\n #appStateSubscription: NativeEventSubscription;\n\n #interval: number;\n\n public audioTrack: MediaStreamTrack;\n\n public rawAudioTrack: MediaStreamTrack;\n\n public videoTrack: MediaStreamTrack;\n\n public rawVideoTrack: MediaStreamTrack;\n\n public screenShareTracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n };\n\n public audioEnabled: boolean;\n\n public videoEnabled: boolean;\n\n public screenShareEnabled: boolean;\n\n private _pendingScreenShare = false;\n\n public currentDevices: {\n audio?: MediaDeviceInfo;\n video?: MediaDeviceInfo;\n speaker?: MediaDeviceInfo;\n };\n\n public permissions: {\n audio?: MediaPermission;\n video?: MediaPermission;\n };\n\n _handleAppStateChange = (nextAppState) => {\n if (\n this.#appState.match(/inactive|background/) &&\n nextAppState === 'active'\n ) {\n BackgroundTimer.clearInterval(this.#interval);\n this.#interval = null;\n if (this.videoTrack) {\n this.videoTrack.enabled = false;\n setTimeout(() => {\n if (this.videoTrack) {\n this.videoTrack.enabled = true;\n }\n }, 100);\n }\n } else {\n if (this.#interval === null) {\n if (this.screenShareEnabled || this._pendingScreenShare) {\n this.configureForeground();\n }\n }\n this.#interval = BackgroundTimer.setInterval(() => {}, 1000);\n this.#appState = nextAppState;\n }\n };\n\n private async configureForeground() {\n if (Platform.OS !== 'android') return;\n const val = await RTKHelper.isForegroundServiceRunning();\n if (!val) {\n if ((Platform.Version as number) >= 33) {\n const res = await PermissionsAndroid.request(\n PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS\n );\n if (res !== PermissionsAndroid.RESULTS.GRANTED) {\n console.warn('Permission required for screenshare notification');\n }\n }\n if ((Platform.Version as number) >= 26) {\n await RTKHelper.createNotificationChannel();\n }\n try {\n await RTKHelper.startService();\n } catch (e) {\n console.warn('Failed to start foreground service', e);\n }\n }\n }\n\n public constructor(localMediaUtils: LocalMediaUtils) {\n super();\n this.#localMediaUtils = localMediaUtils;\n this.#appState = '';\n this.audioEnabled = true;\n this.videoEnabled = true;\n this.screenShareEnabled = false;\n this.permissions = { audio: 'NOT_REQUESTED', video: 'NOT_REQUESTED' };\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n // LocalMediaUtils onDeviceChange with callback from native onAudioDeviceChanged events\n this.#localMediaUtils.onDeviceChange(async (changedDevices) => {\n await this.onDeviceChange(changedDevices, false);\n });\n if (Platform.OS === 'ios') {\n broadcastEmitter.addListener('iOS_BroadcastStarted', () => {\n this.oniOSBroadcastStart();\n });\n broadcastEmitter.addListener('iOS_BroadcastStopped', () => {\n this.oniOSBroadcastStop();\n });\n }\n InCallManger.start({});\n }\n\n private async conditionallyRestartAudio() {\n if (!this.currentDevices.audio || !this.audioEnabled) {\n return;\n }\n // log.info('maybe_restart_audio: ');\n await Promise.race([\n new Promise((resolve) =>\n this.audioTrack?.addEventListener('unmute', (e) => {\n resolve(e);\n })\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n const reacquireTrack = await this.shouldReacquireTrack('audio');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.audioTrack);\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n }\n }\n\n private async conditionallyRestartVideo() {\n if (!this.currentDevices.video || !this.videoEnabled) return;\n // log.info('maybe_restart_video');\n\n await Promise.race([\n new Promise((resolve) =>\n this.videoTrack?.addEventListener('unmute', resolve)\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n\n const reacquireTrack = await this.shouldReacquireTrack('video');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.videoTrack);\n await this.setupVideoStream(this.currentDevices.video.deviceId);\n this.addMediaStreamTrackListeners(this.videoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n }\n\n private async shouldReacquireTrack(kind: 'audio' | 'video') {\n const workaroundWebKitBug1208516 = false;\n let mediaStreamTrack: MediaStreamTrack;\n let wasEnabled = false;\n\n if (kind === 'audio') {\n mediaStreamTrack = this.audioTrack;\n wasEnabled = this.audioEnabled;\n } else if (kind === 'video') {\n mediaStreamTrack = this.videoTrack;\n wasEnabled = this.videoEnabled;\n }\n\n if (!mediaStreamTrack) return false;\n if (!this.rawAudioTrack || !this.audioTrack) return true;\n if (!this.rawVideoTrack || !this.videoTrack) return true;\n const isStopped = mediaStreamTrack.readyState === 'ended';\n\n const isInadvertentlyStopped =\n isStopped && wasEnabled && workaroundWebKitBug1208516;\n\n let isSilentAudio = false;\n if (kind === 'audio') {\n isSilentAudio = await checkIfAudioTrackIsSilent(this.audioTrack);\n }\n\n return mediaStreamTrack.muted || isInadvertentlyStopped || isSilentAudio;\n }\n\n public async removeDocumentEventListeners() {}\n\n private onUnmute(ev) {\n // log.info('Track unmuted', ev);\n }\n\n private removeMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return undefined;\n }\n\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.removeEventListener('ended', conditionallyRestart);\n mediaStreamTrack.removeEventListener('mute', conditionallyRestart);\n mediaStreamTrack.removeEventListener('unmute', this.onUnmute);\n return mediaStreamTrack;\n }\n\n private addMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return null;\n }\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.addEventListener('ended', conditionallyRestart);\n mediaStreamTrack.addEventListener('mute', conditionallyRestart);\n mediaStreamTrack.addEventListener('unmute', this.onUnmute);\n\n return mediaStreamTrack;\n }\n\n public async setupAudioStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n\n if (!audioDevices.length) {\n return;\n }\n\n let audioDeviceId = deviceId;\n\n if (!audioDeviceId) {\n audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n }\n\n if (this.currentDevices.audio?.deviceId !== audioDeviceId) {\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n }\n if (forceStopTrack) {\n this.audioTrack?.stop();\n this.rawAudioTrack?.stop();\n }\n try {\n this.rawAudioTrack = await LocalMediaUtils.getAudioTrack();\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n this.rawAudioTrack = undefined;\n }\n this.setAudioTrack(this.rawAudioTrack);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n this.setDevice(this.currentDevices.audio);\n\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.audioTrack && this.permissions.audio === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.audio,\n });\n }\n\n private onVisibilityChange() {\n // pass\n }\n\n public async setupVideoStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return;\n }\n\n let videoDeviceId = deviceId;\n if (!videoDeviceId) {\n videoDeviceId = (await this.getOperationalWebcamDeviceId()).deviceId;\n }\n\n if (this.currentDevices.video?.deviceId !== videoDeviceId) {\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n }\n\n /**\n * NOTE(roerohan): this.videoEnabled is checked, so that upon device change,\n * the video track is not set when the user has turned off his camera.\n */\n if (this.videoEnabled) {\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n if (!this.rawVideoTrack) {\n try {\n this.rawVideoTrack = await LocalMediaUtils.getVideoTrack(\n videoConstraints\n );\n } catch (err) {\n console.warn('Failed to acquire video track: ', err);\n this.rawVideoTrack = undefined;\n }\n }\n this.setVideoTrack(this.rawVideoTrack);\n this.addMediaStreamTrackListeners(this.rawVideoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n\n if (forceStopTrack) {\n this.videoTrack?.stop();\n this.rawVideoTrack?.stop();\n }\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.videoTrack && this.permissions.video === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.video,\n });\n }\n\n public async setupSpeaker(deviceId?: string) {\n const speakerDevices = this.#localMediaUtils.getSpeakerDevices();\n if (!speakerDevices.length) {\n return;\n }\n const lastDeviceIndex = speakerDevices.length - 1;\n const speakerDeviceId =\n deviceId ?? speakerDevices[lastDeviceIndex].deviceId;\n if (this.currentDevices.speaker?.deviceId !== speakerDeviceId) {\n // Audio Input devices are same as output devices in mobile\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n speakerDeviceId,\n 'audioinput'\n );\n this.currentDevices.speaker = this.currentDevices.audio;\n }\n await this.setDevice(this.currentDevices.audio);\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.speaker,\n });\n }\n\n public async getOperationalWebcamDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n videoDevices = [...videoDevices].reverse();\n\n let operationalDeviceId = null;\n for (\n let deviceIndex = 0;\n deviceIndex < videoDevices.length;\n deviceIndex += 1\n ) {\n try {\n operationalDeviceId = videoDevices[deviceIndex].deviceId;\n break;\n } catch (err) {}\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: videoDevices[0].deviceId };\n }\n\n public async getOperationalMicDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let audioDevices = this.#localMediaUtils.getAudioDevices();\n if (!audioDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n audioDevices = [...audioDevices].reverse();\n let operationalDeviceId = null;\n\n for (\n let deviceIndex = 0;\n deviceIndex < audioDevices.length;\n deviceIndex += 1\n ) {\n try {\n const audioTrack = await LocalMediaUtils.getAudioTrack();\n\n const isSilent = await checkIfAudioTrackIsSilent(audioTrack);\n audioTrack.stop();\n audioTrack.release();\n if (!isSilent) {\n operationalDeviceId = audioDevices[deviceIndex].deviceId;\n break;\n }\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n }\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: audioDevices[0].deviceId };\n }\n\n public async setupStreams({\n audio,\n video,\n }: {\n audio: boolean;\n video: boolean;\n }) {\n try {\n const permResult = await setupPermissions(audio, video);\n this.permissions.video = permResult.camera;\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n this.permissions.audio = val.microphone ?? false;\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n const constraints: RealtimeKitMediaStreamConstraints = {};\n if (!this.currentDevices) {\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n }\n if (audio) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n if (audioDevices.length !== 0) {\n const audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n constraints.audio = true;\n }\n }\n\n if (video) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (videoDevices.length !== 0) {\n const videoDeviceId = (await this.getOperationalWebcamDeviceId())\n .deviceId;\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n constraints.video = videoConstraints.video;\n }\n }\n\n if (audio) await this.setupAudioStream();\n if (video) await this.setupVideoStream();\n\n if (this.audioTrack) this.audioEnabled = true;\n else this.audioEnabled = false;\n\n if (this.videoTrack) this.videoEnabled = true;\n else this.videoEnabled = false;\n\n this.screenShareEnabled = false;\n\n // Setting default audio output to speaker\n await this.setupSpeaker();\n\n // Setup Foreground Service after handling permissions\n if (Platform.OS === 'android') {\n this.#appStateSubscription = AppState.addEventListener(\n 'change',\n this._handleAppStateChange\n );\n }\n }\n\n private stopScreenShareTracks(\n tracks: { audio?: boolean; video?: boolean } = {}\n ) {\n const { audio = true, video = true } = tracks;\n if (audio) {\n this.screenShareTracks?.audio?.stop();\n }\n\n if (video) {\n this.screenShareTracks?.video?.stop();\n }\n\n if (audio && video) {\n this.screenShareEnabled = false;\n }\n }\n\n public removeScreenShareTracks(tracks?: {\n audio?: boolean;\n video?: boolean;\n }) {\n this.screenShareTracks.video?.removeEventListener(\n 'ended',\n this.onScreenShareEnded\n );\n this.stopScreenShareTracks(tracks);\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n }\n\n private setAudioTrack(audioTrack: MediaStreamTrack) {\n if (audioTrack === this.audioTrack) {\n return;\n }\n\n if (audioTrack === undefined) {\n this.stopAudioTrack();\n }\n\n this.audioTrack = audioTrack;\n }\n\n private setVideoTrack(videoTrack: MediaStreamTrack) {\n if (videoTrack === this.videoTrack) {\n return;\n }\n\n if (videoTrack === undefined) {\n this.stopVideoTrack();\n }\n\n this.videoTrack = videoTrack;\n }\n\n private setScreenShareTracks(tracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n }) {\n const { audio, video } = tracks;\n // console.log('SetScreenshare called');\n if (!audio || !video) {\n this.stopScreenShareTracks({ audio: !!audio, video: !!video });\n }\n\n this.screenShareTracks = tracks;\n this.screenShareTracks.video?.addEventListener(\n 'ended',\n this.onScreenShareEnded.bind(this)\n );\n }\n\n private onScreenShareEnded() {\n this.emit('SCREENSHARE_ENDED');\n }\n\n public async disableAudio() {\n await this.toggleAudio();\n }\n\n public async enableAudio() {\n await this.toggleAudio();\n }\n\n public async toggleAudio() {\n if (this.permissions.audio !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(true, false);\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.audio = val.microphone ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n this.audioEnabled = false;\n return;\n }\n if (this.audioEnabled) {\n this.audioEnabled = false;\n\n if (this.audioTrack) {\n this.audioTrack.enabled = this.audioEnabled;\n }\n return;\n }\n try {\n /**\n * NOTE (@madhugb): We need to setup new stream,\n * if the audio track is not preset or it has ended\n */\n if (!this.audioTrack || this.audioTrack.readyState === 'ended') {\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n }\n // if we still can't get a track after setting up audio stream\n // do not toggle the audio state\n if (!this.audioTrack) {\n this.audioEnabled = false;\n return;\n }\n this.audioEnabled = true;\n } catch (ex) {\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n if (this.audioTrack) {\n this.audioTrack.enabled = true;\n }\n }\n\n public async enableVideo() {\n await this.toggleVideo();\n }\n\n public async disableVideo() {\n await this.toggleVideo();\n }\n\n public async toggleVideo() {\n if (this.permissions.video !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(false, true);\n this.permissions.video = permResult.camera;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n if (\n this.permissions.video === 'DENIED' ||\n this.permissions.video === 'NOT_REQUESTED'\n ) {\n this.videoEnabled = false;\n return;\n }\n if (this.videoEnabled) {\n this.stopVideoTrack();\n this.videoEnabled = false;\n return;\n }\n /**\n * NOTE(roerohan): The videoEnabled flag is used inside the setupVideoStream method\n * hence it must be set to true first.\n */\n this.videoEnabled = true;\n await this.setupVideoStream(this.currentDevices.video?.deviceId);\n }\n\n public async setAudioDevice(device: MediaDeviceInfo) {\n await this.setupAudioStream(device.deviceId);\n }\n\n public async setVideoDevice(device: MediaDeviceInfo) {\n if (this.videoEnabled) {\n this.stopVideoTrack();\n }\n await this.setupVideoStream(device.deviceId);\n }\n\n public async setSpeakerDevice(device?: MediaDeviceInfo) {\n await this.setupSpeaker(device.deviceId);\n }\n\n public async setDevice(route: MediaDeviceInfo) {\n await this.#localMediaUtils.chooseAudioRoute(route.deviceId);\n }\n\n private async oniOSBroadcastStart() {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n this.emit('SCREENSHARE_TRACK_CHANGE');\n }\n\n private async oniOSBroadcastStop() {\n if (this.screenShareEnabled) {\n this.removeScreenShareTracks();\n this.emit('SCREENSHARE_TRACK_CHANGE');\n return;\n }\n }\n\n public async toggleScreenShare() {\n if (this.screenShareEnabled && Platform.OS !== 'ios') {\n this.removeScreenShareTracks();\n try {\n await RTKHelper.stopService();\n } catch (e) {\n console.warn('Failed to stop foreground service', e);\n }\n return;\n }\n if (Platform.OS === 'ios' && this.screenShareEnabled) {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n return;\n }\n\n if (Platform.OS === 'android') {\n this._pendingScreenShare = true;\n await this.configureForeground();\n try {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n } catch (e) {\n console.warn('Failed to start screenshare', e);\n this.screenShareEnabled = false;\n await RTKHelper.stopService();\n this._pendingScreenShare = false;\n } finally {\n this._pendingScreenShare = false;\n }\n }\n if (Platform.OS === 'ios') {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n }\n }\n\n public async enableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public async disableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public getAllDevices() {\n return this.#localMediaUtils.availableDevices;\n }\n\n public getCurrentDevices() {\n return this.currentDevices;\n }\n\n public getDeviceById(\n deviceId: string,\n kind: 'audioinput' | 'audiooutput' | 'videoinput'\n ) {\n return this.#localMediaUtils.getDeviceById(deviceId, kind);\n }\n\n public getAudioDevices() {\n return this.#localMediaUtils.getAudioDevices();\n }\n\n public getVideoDevices() {\n return this.#localMediaUtils.getVideoDevices();\n }\n\n public getSpeakerDevices() {\n return this.#localMediaUtils.getSpeakerDevices();\n }\n\n public async onDeviceChange(\n changedDevices: {\n added: MediaDeviceInfo[];\n removed: MediaDeviceInfo[];\n },\n forceDeviceChange: boolean\n ) {\n let addedDevice: MediaDeviceInfo;\n let removedDevice: MediaDeviceInfo;\n if (changedDevices.added.length) [addedDevice] = changedDevices.added;\n\n if (changedDevices.removed.length) [removedDevice] = changedDevices.removed;\n\n /**\n * NOTE(roerohan): forceStopTrack is set required to be set to true for firefox.\n * https://stackoverflow.com/questions/59068146/navigator-mediadevices-getusermedia-api-rejecting-with-error-notreadableerror\n * forceStopTrack is the second argument of setupAudioStream and setupVideoStream.\n */\n if (addedDevice) {\n if (addedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker(addedDevice.deviceId);\n } else {\n await this.setupAudioStream(addedDevice.deviceId);\n }\n } else if (addedDevice.kind === 'videoinput') {\n await this.setupVideoStream(addedDevice.deviceId);\n } else if (addedDevice.kind === 'audiooutput') {\n await this.setupSpeaker(addedDevice.deviceId);\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (removedDevice) {\n if (removedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker();\n } else {\n await this.setupAudioStream();\n }\n } else if (removedDevice.kind === 'videoinput') {\n await this.setupVideoStream();\n } else if (removedDevice.kind === 'audiooutput') {\n await this.setupSpeaker();\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (changedDevices.added.length || changedDevices.removed.length) {\n this.emit('DEVICE_LIST_UPDATED', changedDevices);\n }\n }\n\n public static async init(_) {\n const localMediaUtils = await LocalMediaUtils.init();\n return new LocalMediaHandler(localMediaUtils);\n }\n\n public emit(event: keyof typeof MediaEvents, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n public on(\n event: keyof typeof MediaEvents,\n listener: (...args: any[]) => void\n ) {\n return super.on(event, listener);\n }\n\n public destruct() {\n // TODO: Do not remove native broadcast listeners when going OFF_STAGE in webinar\n // this.#localMediaUtils.destruct();\n if (Platform.OS === 'android') this.#appStateSubscription.remove();\n BackgroundTimer.stop();\n try {\n if (Platform.OS === 'android') RTKHelper.stopService();\n } catch (_err) {}\n // InCallManger.stop(undefined);\n }\n\n private stopAudioTrack() {\n this.rawAudioTrack?.stop();\n this.audioTrack?.stop();\n this.rawAudioTrack?.release();\n this.audioTrack?.release();\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n\n private stopVideoTrack() {\n this.rawVideoTrack?.stop();\n this.videoTrack?.stop();\n this.rawVideoTrack?.release();\n this.videoTrack?.release();\n this.videoTrack = undefined;\n this.rawVideoTrack = undefined;\n }\n}\n\nexport interface RNLocalMediaHandler {\n new (): LocalMediaHandler;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["EventEmitter","LocalMediaUtils","AppState","NativeEventEmitter","NativeModules","PermissionsAndroid","Platform","BackgroundTimer","InCallManger","setupPermissions","RTKHelper","BroadcastEventEmitter","broadcastEmitter","MediaEvents","checkIfAudioTrackIsSilent","track","_localMediaUtils","WeakMap","_appState","_appStateSubscription","_interval","LocalMediaHandler","configureForeground","OS","val","isForegroundServiceRunning","Version","res","request","PERMISSIONS","POST_NOTIFICATIONS","RESULTS","GRANTED","console","warn","createNotificationChannel","startService","e","constructor","localMediaUtils","_classPrivateFieldInitSpec","_defineProperty","nextAppState","_classPrivateFieldGet","match","clearInterval","_classPrivateFieldSet","videoTrack","enabled","setTimeout","screenShareEnabled","_pendingScreenShare","setInterval","audioEnabled","videoEnabled","permissions","audio","video","screenShareTracks","undefined","currentDevices","speaker","onDeviceChange","changedDevices","addListener","oniOSBroadcastStart","oniOSBroadcastStop","start","conditionallyRestartAudio","Promise","race","resolve","_this$audioTrack","audioTrack","addEventListener","reacquireTrack","shouldReacquireTrack","_this$currentDevices$","removeMediaStreamTrackListeners","setupAudioStream","deviceId","addMediaStreamTrackListeners","emit","conditionallyRestartVideo","_this$videoTrack","setupVideoStream","kind","workaroundWebKitBug1208516","mediaStreamTrack","wasEnabled","rawAudioTrack","rawVideoTrack","isStopped","readyState","isInadvertentlyStopped","isSilentAudio","muted","removeDocumentEventListeners","onUnmute","ev","conditionallyRestart","removeEventListener","forceStopTrack","_this$currentDevices$2","audioDevices","getAudioDevices","length","audioDeviceId","getOperationalMicDeviceId","getDeviceById","_this$audioTrack2","_this$rawAudioTrack","stop","getAudioTrack","err","setAudioTrack","setDevice","repopulateAvailableDevices","device","onVisibilityChange","_this$currentDevices$3","videoDevices","getVideoDevices","videoDeviceId","getOperationalWebcamDeviceId","videoConstraints","getVideoConstraints","getVideoTrack","setVideoTrack","_this$videoTrack2","_this$rawVideoTrack","setupSpeaker","_this$currentDevices$4","speakerDevices","getSpeakerDevices","lastDeviceIndex","speakerDeviceId","isOperational","reverse","operationalDeviceId","deviceIndex","isSilent","release","setupStreams","permResult","camera","microphone","message","constraints","_handleAppStateChange","stopScreenShareTracks","tracks","_this$screenShareTrac","_this$screenShareTrac2","removeScreenShareTracks","_this$screenShareTrac3","onScreenShareEnded","stopAudioTrack","stopVideoTrack","setScreenShareTracks","_this$screenShareTrac4","bind","disableAudio","toggleAudio","enableAudio","_this$currentDevices$5","ex","enableVideo","toggleVideo","disableVideo","_this$currentDevices$6","setAudioDevice","setVideoDevice","setSpeakerDevice","route","chooseAudioRoute","getScreenShareTracks","toggleScreenShare","stopService","RTKScreensharePickerView","showScreenSharePickerView","enableScreenShare","disableScreenShare","getAllDevices","availableDevices","getCurrentDevices","forceDeviceChange","addedDevice","removedDevice","added","removed","init","_","event","args","on","listener","destruct","remove","_err","_this$rawAudioTrack2","_this$audioTrack3","_this$rawAudioTrack3","_this$audioTrack4","_this$rawVideoTrack2","_this$videoTrack3","_this$rawVideoTrack3","_this$videoTrack4"],"sources":["LocalMediaHandler.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { EventEmitter } from 'events';\nimport LocalMediaUtils from './LocalMediaUtils';\nimport {\n RealtimeKitMediaStreamConstraints,\n MediaPermission,\n} from './LocalMediaInterfaces';\nimport type { MediaStreamTrack } from '@cloudflare/react-native-webrtc';\nimport type { MediaDeviceInfo } from './LocalMediaInterfaces';\nimport {\n AppState,\n NativeEventEmitter,\n NativeEventSubscription,\n NativeModules,\n PermissionsAndroid,\n Platform,\n} from 'react-native';\nimport BackgroundTimer from './BackgroundHandler';\nimport InCallManger from './NativeAudioManager';\nimport { setupPermissions } from './PermissionHandler';\n\nconst { RTKHelper, BroadcastEventEmitter } = NativeModules;\n\nconst broadcastEmitter = new NativeEventEmitter(BroadcastEventEmitter);\n\n// eslint-disable-next-line no-shadow\nexport enum MediaEvents {\n AUDIO_TRACK_CHANGE,\n VIDEO_TRACK_CHANGE,\n SCREENSHARE_TRACK_CHANGE,\n SCREENSHARE_ENDED,\n DEVICE_CHANGE,\n SCREENSHARE_STARTED,\n MEDIA_PERMISSION_UPDATE,\n DEVICE_LIST_UPDATED,\n}\n\nfunction checkIfAudioTrackIsSilent(track: MediaStreamTrack) {\n //TODO\n return !!track;\n}\n\nexport default class LocalMediaHandler extends EventEmitter {\n #localMediaUtils: LocalMediaUtils;\n\n #appState: string;\n\n #appStateSubscription: NativeEventSubscription;\n\n #interval: number;\n\n public audioTrack: MediaStreamTrack;\n\n public rawAudioTrack: MediaStreamTrack;\n\n public videoTrack: MediaStreamTrack;\n\n public rawVideoTrack: MediaStreamTrack;\n\n public screenShareTracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n };\n\n public audioEnabled: boolean;\n\n public videoEnabled: boolean;\n\n public screenShareEnabled: boolean;\n\n private _pendingScreenShare = false;\n\n public currentDevices: {\n audio?: MediaDeviceInfo;\n video?: MediaDeviceInfo;\n speaker?: MediaDeviceInfo;\n };\n\n public permissions: {\n audio?: MediaPermission;\n video?: MediaPermission;\n };\n\n _handleAppStateChange = (nextAppState) => {\n if (\n this.#appState.match(/inactive|background/) &&\n nextAppState === 'active'\n ) {\n BackgroundTimer.clearInterval(this.#interval);\n this.#interval = null;\n if (this.videoTrack) {\n this.videoTrack.enabled = false;\n setTimeout(() => {\n if (this.videoTrack) {\n this.videoTrack.enabled = true;\n }\n }, 100);\n }\n } else {\n if (this.#interval === null) {\n if (this.screenShareEnabled || this._pendingScreenShare) {\n this.configureForeground();\n }\n }\n this.#interval = BackgroundTimer.setInterval(() => {}, 1000);\n this.#appState = nextAppState;\n }\n };\n\n private async configureForeground() {\n if (Platform.OS !== 'android') return;\n const val = await RTKHelper.isForegroundServiceRunning();\n if (!val) {\n if ((Platform.Version as number) >= 33) {\n const res = await PermissionsAndroid.request(\n PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS\n );\n if (res !== PermissionsAndroid.RESULTS.GRANTED) {\n console.warn('Permission required for screenshare notification');\n }\n }\n if ((Platform.Version as number) >= 26) {\n await RTKHelper.createNotificationChannel();\n }\n try {\n await RTKHelper.startService();\n } catch (e) {\n console.warn('Failed to start foreground service', e);\n }\n }\n }\n\n public constructor(localMediaUtils: LocalMediaUtils) {\n super();\n this.#localMediaUtils = localMediaUtils;\n this.#appState = '';\n this.audioEnabled = true;\n this.videoEnabled = true;\n this.screenShareEnabled = false;\n this.permissions = { audio: 'NOT_REQUESTED', video: 'NOT_REQUESTED' };\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n // LocalMediaUtils onDeviceChange with callback from native onAudioDeviceChanged events\n this.#localMediaUtils.onDeviceChange(async (changedDevices) => {\n await this.onDeviceChange(changedDevices, false);\n });\n if (Platform.OS === 'ios') {\n broadcastEmitter.addListener('iOS_BroadcastStarted', () => {\n this.oniOSBroadcastStart();\n });\n broadcastEmitter.addListener('iOS_BroadcastStopped', () => {\n this.oniOSBroadcastStop();\n });\n }\n InCallManger.start({});\n }\n\n private async conditionallyRestartAudio() {\n if (!this.currentDevices.audio || !this.audioEnabled) {\n return;\n }\n // log.info('maybe_restart_audio: ');\n await Promise.race([\n new Promise((resolve) =>\n this.audioTrack?.addEventListener('unmute', (e) => {\n resolve(e);\n })\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n const reacquireTrack = await this.shouldReacquireTrack('audio');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.audioTrack);\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n }\n }\n\n private async conditionallyRestartVideo() {\n if (!this.currentDevices.video || !this.videoEnabled) return;\n // log.info('maybe_restart_video');\n\n await Promise.race([\n new Promise((resolve) =>\n this.videoTrack?.addEventListener('unmute', resolve)\n ),\n new Promise((resolve) => setTimeout(resolve, 50)),\n ]);\n\n const reacquireTrack = await this.shouldReacquireTrack('video');\n\n if (reacquireTrack) {\n this.removeMediaStreamTrackListeners(this.videoTrack);\n await this.setupVideoStream(this.currentDevices.video.deviceId);\n this.addMediaStreamTrackListeners(this.videoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n }\n\n private async shouldReacquireTrack(kind: 'audio' | 'video') {\n const workaroundWebKitBug1208516 = false;\n let mediaStreamTrack: MediaStreamTrack;\n let wasEnabled = false;\n\n if (kind === 'audio') {\n mediaStreamTrack = this.audioTrack;\n wasEnabled = this.audioEnabled;\n } else if (kind === 'video') {\n mediaStreamTrack = this.videoTrack;\n wasEnabled = this.videoEnabled;\n }\n\n if (!mediaStreamTrack) return false;\n if (!this.rawAudioTrack || !this.audioTrack) return true;\n if (!this.rawVideoTrack || !this.videoTrack) return true;\n const isStopped = mediaStreamTrack.readyState === 'ended';\n\n const isInadvertentlyStopped =\n isStopped && wasEnabled && workaroundWebKitBug1208516;\n\n let isSilentAudio = false;\n if (kind === 'audio') {\n isSilentAudio = await checkIfAudioTrackIsSilent(this.audioTrack);\n }\n\n return mediaStreamTrack.muted || isInadvertentlyStopped || isSilentAudio;\n }\n\n public async removeDocumentEventListeners() {}\n\n private onUnmute(ev) {\n // log.info('Track unmuted', ev);\n }\n\n private removeMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return undefined;\n }\n\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.removeEventListener('ended', conditionallyRestart);\n mediaStreamTrack.removeEventListener('mute', conditionallyRestart);\n mediaStreamTrack.removeEventListener('unmute', this.onUnmute);\n return mediaStreamTrack;\n }\n\n private addMediaStreamTrackListeners(mediaStreamTrack: MediaStreamTrack) {\n if (!mediaStreamTrack) {\n return null;\n }\n const conditionallyRestart =\n mediaStreamTrack.kind === 'audio'\n ? this.conditionallyRestartAudio\n : this.conditionallyRestartVideo;\n mediaStreamTrack.addEventListener('ended', conditionallyRestart);\n mediaStreamTrack.addEventListener('mute', conditionallyRestart);\n mediaStreamTrack.addEventListener('unmute', this.onUnmute);\n\n return mediaStreamTrack;\n }\n\n public async setupAudioStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n\n if (!audioDevices.length) {\n return;\n }\n\n let audioDeviceId = deviceId;\n\n if (!audioDeviceId) {\n audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n }\n\n if (this.currentDevices.audio?.deviceId !== audioDeviceId) {\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n }\n if (forceStopTrack) {\n this.audioTrack?.stop();\n this.rawAudioTrack?.stop();\n }\n try {\n this.rawAudioTrack = await LocalMediaUtils.getAudioTrack();\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n this.rawAudioTrack = undefined;\n }\n this.setAudioTrack(this.rawAudioTrack);\n this.addMediaStreamTrackListeners(this.audioTrack);\n this.emit('AUDIO_TRACK_CHANGE');\n this.setDevice(this.currentDevices.audio);\n\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.audioTrack && this.permissions.audio === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.audio,\n });\n }\n\n private onVisibilityChange() {\n // pass\n }\n\n public async setupVideoStream(\n deviceId?: string,\n forceStopTrack: boolean = false\n ) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return;\n }\n\n let videoDeviceId = deviceId;\n if (!videoDeviceId) {\n videoDeviceId = (await this.getOperationalWebcamDeviceId()).deviceId;\n }\n\n if (this.currentDevices.video?.deviceId !== videoDeviceId) {\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n }\n\n /**\n * NOTE(roerohan): this.videoEnabled is checked, so that upon device change,\n * the video track is not set when the user has turned off his camera.\n */\n if (this.videoEnabled) {\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n if (!this.rawVideoTrack) {\n try {\n this.rawVideoTrack = await LocalMediaUtils.getVideoTrack(\n videoConstraints\n );\n } catch (err) {\n console.warn('Failed to acquire video track: ', err);\n this.rawVideoTrack = undefined;\n }\n }\n this.setVideoTrack(this.rawVideoTrack);\n this.addMediaStreamTrackListeners(this.rawVideoTrack);\n this.emit('VIDEO_TRACK_CHANGE');\n }\n\n if (forceStopTrack) {\n this.videoTrack?.stop();\n this.rawVideoTrack?.stop();\n }\n /**\n * NOTE(roerohan): Firefox does not show device labels until permissions are granted.\n * So, we need to repopulate the devices once permission is granted.\n */\n if (this.videoTrack && this.permissions.video === 'NOT_REQUESTED') {\n await this.#localMediaUtils.repopulateAvailableDevices();\n }\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.video,\n });\n }\n\n public async setupSpeaker(deviceId?: string) {\n const speakerDevices = this.#localMediaUtils.getSpeakerDevices();\n if (!speakerDevices.length) {\n return;\n }\n const lastDeviceIndex = speakerDevices.length - 1;\n const speakerDeviceId =\n deviceId ?? speakerDevices[lastDeviceIndex].deviceId;\n if (this.currentDevices.speaker?.deviceId !== speakerDeviceId) {\n // Audio Input devices are same as output devices in mobile\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n speakerDeviceId,\n 'audioinput'\n );\n this.currentDevices.speaker = this.currentDevices.audio;\n }\n await this.setDevice(this.currentDevices.audio);\n this.emit('DEVICE_CHANGE', {\n device: this.currentDevices.speaker,\n });\n }\n\n public async getOperationalWebcamDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let videoDevices = this.#localMediaUtils.getVideoDevices();\n if (!videoDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n videoDevices = [...videoDevices].reverse();\n\n let operationalDeviceId = null;\n for (\n let deviceIndex = 0;\n deviceIndex < videoDevices.length;\n deviceIndex += 1\n ) {\n try {\n operationalDeviceId = videoDevices[deviceIndex].deviceId;\n break;\n } catch (err) {}\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: videoDevices[0].deviceId };\n }\n\n public async getOperationalMicDeviceId(): Promise<{\n isOperational: boolean;\n deviceId: string;\n }> {\n let audioDevices = this.#localMediaUtils.getAudioDevices();\n if (!audioDevices.length) {\n return { isOperational: false, deviceId: null };\n }\n /*\n NOTE(ravindra-dyte): Usually external devices come at the bottom,\n By reversing the deviceList and breaking on first operational device\n We are giving preference to external device\n */\n\n audioDevices = [...audioDevices].reverse();\n let operationalDeviceId = null;\n\n for (\n let deviceIndex = 0;\n deviceIndex < audioDevices.length;\n deviceIndex += 1\n ) {\n try {\n const audioTrack = await LocalMediaUtils.getAudioTrack();\n\n const isSilent = await checkIfAudioTrackIsSilent(audioTrack);\n audioTrack.stop();\n audioTrack.release();\n if (!isSilent) {\n operationalDeviceId = audioDevices[deviceIndex].deviceId;\n break;\n }\n } catch (err) {\n console.warn('Failed to acquire audio track: ', err);\n }\n }\n\n return operationalDeviceId\n ? { isOperational: true, deviceId: operationalDeviceId }\n : { isOperational: false, deviceId: audioDevices[0].deviceId };\n }\n\n public async setupStreams({\n audio,\n video,\n }: {\n audio: boolean;\n video: boolean;\n }) {\n try {\n const permResult = await setupPermissions(audio, video);\n this.permissions.video = permResult.camera;\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n this.permissions.audio = val.microphone ?? false;\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n const constraints: RealtimeKitMediaStreamConstraints = {};\n if (!this.currentDevices) {\n this.currentDevices = {\n audio: undefined,\n video: undefined,\n speaker: undefined,\n };\n }\n if (audio) {\n const audioDevices = this.#localMediaUtils.getAudioDevices();\n if (audioDevices.length !== 0) {\n const audioDeviceId = (await this.getOperationalMicDeviceId()).deviceId;\n this.currentDevices.audio = this.#localMediaUtils.getDeviceById(\n audioDeviceId,\n 'audioinput'\n );\n constraints.audio = true;\n }\n }\n\n if (video) {\n const videoDevices = this.#localMediaUtils.getVideoDevices();\n if (videoDevices.length !== 0) {\n const videoDeviceId = (await this.getOperationalWebcamDeviceId())\n .deviceId;\n this.currentDevices.video = this.#localMediaUtils.getDeviceById(\n videoDeviceId,\n 'videoinput'\n );\n\n const videoConstraints = LocalMediaUtils.getVideoConstraints({\n videoDeviceId,\n });\n constraints.video = videoConstraints.video;\n }\n }\n\n if (audio) await this.setupAudioStream();\n if (video) await this.setupVideoStream();\n\n if (this.audioTrack) this.audioEnabled = true;\n else this.audioEnabled = false;\n\n if (this.videoTrack) this.videoEnabled = true;\n else this.videoEnabled = false;\n\n this.screenShareEnabled = false;\n\n // Setting default audio output to speaker\n await this.setupSpeaker();\n\n // Setup Foreground Service after handling permissions\n if (Platform.OS === 'android') {\n this.#appStateSubscription = AppState.addEventListener(\n 'change',\n this._handleAppStateChange\n );\n }\n }\n\n private stopScreenShareTracks(\n tracks: { audio?: boolean; video?: boolean } = {}\n ) {\n const { audio = true, video = true } = tracks;\n if (audio) {\n this.screenShareTracks?.audio?.stop();\n }\n\n if (video) {\n this.screenShareTracks?.video?.stop();\n }\n\n if (audio && video) {\n this.screenShareEnabled = false;\n }\n }\n\n public removeScreenShareTracks(tracks?: {\n audio?: boolean;\n video?: boolean;\n }) {\n this.screenShareTracks.video?.removeEventListener(\n 'ended',\n this.onScreenShareEnded\n );\n this.stopScreenShareTracks(tracks);\n this.screenShareTracks = {\n audio: undefined,\n video: undefined,\n };\n }\n\n private setAudioTrack(audioTrack: MediaStreamTrack) {\n if (audioTrack === this.audioTrack) {\n return;\n }\n\n if (audioTrack === undefined) {\n this.stopAudioTrack();\n }\n\n this.audioTrack = audioTrack;\n }\n\n private setVideoTrack(videoTrack: MediaStreamTrack) {\n if (videoTrack === this.videoTrack) {\n return;\n }\n\n if (videoTrack === undefined) {\n this.stopVideoTrack();\n }\n\n this.videoTrack = videoTrack;\n }\n\n private setScreenShareTracks(tracks: {\n audio?: MediaStreamTrack;\n video?: MediaStreamTrack;\n }) {\n const { audio, video } = tracks;\n // console.log('SetScreenshare called');\n if (!audio || !video) {\n this.stopScreenShareTracks({ audio: !!audio, video: !!video });\n }\n\n this.screenShareTracks = tracks;\n this.screenShareTracks.video?.addEventListener(\n 'ended',\n this.onScreenShareEnded.bind(this)\n );\n }\n\n private onScreenShareEnded() {\n this.emit('SCREENSHARE_ENDED');\n }\n\n public async disableAudio() {\n await this.toggleAudio();\n }\n\n public async enableAudio() {\n await this.toggleAudio();\n }\n\n public async toggleAudio() {\n if (this.permissions.audio !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(true, false);\n this.permissions.audio = permResult.microphone;\n } catch (val) {\n this.permissions.audio = val.microphone ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'audio',\n message: this.permissions.audio,\n });\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n this.audioEnabled = false;\n return;\n }\n if (this.audioEnabled) {\n this.audioEnabled = false;\n\n if (this.audioTrack) {\n this.audioTrack.enabled = this.audioEnabled;\n }\n return;\n }\n try {\n /**\n * NOTE (@madhugb): We need to setup new stream,\n * if the audio track is not preset or it has ended\n */\n if (!this.audioTrack || this.audioTrack.readyState === 'ended') {\n await this.setupAudioStream(this.currentDevices.audio?.deviceId);\n }\n // if we still can't get a track after setting up audio stream\n // do not toggle the audio state\n if (!this.audioTrack) {\n this.audioEnabled = false;\n return;\n }\n this.audioEnabled = true;\n } catch (ex) {\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n if (this.audioTrack) {\n this.audioTrack.enabled = true;\n }\n }\n\n public async enableVideo() {\n await this.toggleVideo();\n }\n\n public async disableVideo() {\n await this.toggleVideo();\n }\n\n public async toggleVideo() {\n if (this.permissions.video !== 'ACCEPTED') {\n try {\n const permResult = await setupPermissions(false, true);\n this.permissions.video = permResult.camera;\n } catch (val) {\n this.permissions.video = val.camera ?? false;\n }\n }\n this.emit('MEDIA_PERMISSION_UPDATE', {\n kind: 'video',\n message: this.permissions.video,\n });\n if (\n this.permissions.video === 'DENIED' ||\n this.permissions.video === 'NOT_REQUESTED'\n ) {\n this.videoEnabled = false;\n return;\n }\n if (this.videoEnabled) {\n this.stopVideoTrack();\n this.videoEnabled = false;\n return;\n }\n /**\n * NOTE(roerohan): The videoEnabled flag is used inside the setupVideoStream method\n * hence it must be set to true first.\n */\n this.videoEnabled = true;\n await this.setupVideoStream(this.currentDevices.video?.deviceId);\n }\n\n public async setAudioDevice(device: MediaDeviceInfo) {\n await this.setupAudioStream(device.deviceId);\n }\n\n public async setVideoDevice(device: MediaDeviceInfo) {\n if (this.videoEnabled) {\n this.stopVideoTrack();\n }\n await this.setupVideoStream(device.deviceId);\n }\n\n public async setSpeakerDevice(device?: MediaDeviceInfo) {\n await this.setupSpeaker(device.deviceId);\n }\n\n public async setDevice(route: MediaDeviceInfo) {\n await this.#localMediaUtils.chooseAudioRoute(route.deviceId);\n }\n\n private async oniOSBroadcastStart() {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n this.emit('SCREENSHARE_TRACK_CHANGE');\n }\n\n private async oniOSBroadcastStop() {\n if (this.screenShareEnabled) {\n this.removeScreenShareTracks();\n this.emit('SCREENSHARE_TRACK_CHANGE');\n return;\n }\n }\n\n public async toggleScreenShare() {\n if (this.screenShareEnabled && Platform.OS !== 'ios') {\n this.removeScreenShareTracks();\n try {\n const val = await RTKHelper.isForegroundServiceRunning();\n if (val) {\n await RTKHelper.stopService();\n }\n } catch (e) {\n console.warn('Failed to stop foreground service', e);\n }\n return;\n }\n if (Platform.OS === 'ios' && this.screenShareEnabled) {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n return;\n }\n\n if (Platform.OS === 'android') {\n this._pendingScreenShare = true;\n await this.configureForeground();\n try {\n this.setScreenShareTracks(await LocalMediaUtils.getScreenShareTracks());\n this.screenShareEnabled = true;\n } catch (e) {\n console.warn('Failed to start screenshare', e);\n this.screenShareEnabled = false;\n const val = await RTKHelper.isForegroundServiceRunning();\n if (val) {\n await RTKHelper.stopService();\n }\n this._pendingScreenShare = false;\n } finally {\n this._pendingScreenShare = false;\n }\n }\n if (Platform.OS === 'ios') {\n NativeModules.RTKScreensharePickerView.showScreenSharePickerView();\n }\n }\n\n public async enableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public async disableScreenShare() {\n await this.toggleScreenShare();\n }\n\n public getAllDevices() {\n return this.#localMediaUtils.availableDevices;\n }\n\n public getCurrentDevices() {\n return this.currentDevices;\n }\n\n public getDeviceById(\n deviceId: string,\n kind: 'audioinput' | 'audiooutput' | 'videoinput'\n ) {\n return this.#localMediaUtils.getDeviceById(deviceId, kind);\n }\n\n public getAudioDevices() {\n return this.#localMediaUtils.getAudioDevices();\n }\n\n public getVideoDevices() {\n return this.#localMediaUtils.getVideoDevices();\n }\n\n public getSpeakerDevices() {\n return this.#localMediaUtils.getSpeakerDevices();\n }\n\n public async onDeviceChange(\n changedDevices: {\n added: MediaDeviceInfo[];\n removed: MediaDeviceInfo[];\n },\n forceDeviceChange: boolean\n ) {\n let addedDevice: MediaDeviceInfo;\n let removedDevice: MediaDeviceInfo;\n if (changedDevices.added.length) [addedDevice] = changedDevices.added;\n\n if (changedDevices.removed.length) [removedDevice] = changedDevices.removed;\n\n /**\n * NOTE(roerohan): forceStopTrack is set required to be set to true for firefox.\n * https://stackoverflow.com/questions/59068146/navigator-mediadevices-getusermedia-api-rejecting-with-error-notreadableerror\n * forceStopTrack is the second argument of setupAudioStream and setupVideoStream.\n */\n if (addedDevice) {\n if (addedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker(addedDevice.deviceId);\n } else {\n await this.setupAudioStream(addedDevice.deviceId);\n }\n } else if (addedDevice.kind === 'videoinput') {\n await this.setupVideoStream(addedDevice.deviceId);\n } else if (addedDevice.kind === 'audiooutput') {\n await this.setupSpeaker(addedDevice.deviceId);\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (removedDevice) {\n if (removedDevice.kind === 'audioinput') {\n if (\n this.permissions.audio === 'DENIED' ||\n this.permissions.audio === 'NOT_REQUESTED'\n ) {\n await this.setupSpeaker();\n } else {\n await this.setupAudioStream();\n }\n } else if (removedDevice.kind === 'videoinput') {\n await this.setupVideoStream();\n } else if (removedDevice.kind === 'audiooutput') {\n await this.setupSpeaker();\n }\n this.emit('AUDIO_TRACK_CHANGE');\n }\n\n if (changedDevices.added.length || changedDevices.removed.length) {\n this.emit('DEVICE_LIST_UPDATED', changedDevices);\n }\n }\n\n public static async init(_) {\n const localMediaUtils = await LocalMediaUtils.init();\n return new LocalMediaHandler(localMediaUtils);\n }\n\n public emit(event: keyof typeof MediaEvents, ...args: any[]) {\n return super.emit(event, ...args);\n }\n\n public on(\n event: keyof typeof MediaEvents,\n listener: (...args: any[]) => void\n ) {\n return super.on(event, listener);\n }\n\n public destruct() {\n // TODO: Do not remove native broadcast listeners when going OFF_STAGE in webinar\n // this.#localMediaUtils.destruct();\n if (Platform.OS === 'android') this.#appStateSubscription.remove();\n BackgroundTimer.stop();\n try {\n if (Platform.OS === 'android') RTKHelper.stopService();\n } catch (_err) {}\n // InCallManger.stop(undefined);\n }\n\n private stopAudioTrack() {\n this.rawAudioTrack?.stop();\n this.audioTrack?.stop();\n this.rawAudioTrack?.release();\n this.audioTrack?.release();\n this.audioEnabled = false;\n this.audioTrack = undefined;\n this.rawAudioTrack = undefined;\n }\n\n private stopVideoTrack() {\n this.rawVideoTrack?.stop();\n this.videoTrack?.stop();\n this.rawVideoTrack?.release();\n this.videoTrack?.release();\n this.videoTrack = undefined;\n this.rawVideoTrack = undefined;\n }\n}\n\nexport interface RNLocalMediaHandler {\n new (): LocalMediaHandler;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- export const SDK_VERSION = '0.1.4-staging.4';
1
+ export const SDK_VERSION = '0.1.4-staging.5';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["SDK_VERSION"],"sources":["version.ts"],"sourcesContent":["export const SDK_VERSION = '0.1.4-staging.4';\n"],"mappings":"AAAA,OAAO,MAAMA,WAAW,GAAG,iBAAiB","ignoreList":[]}
1
+ {"version":3,"names":["SDK_VERSION"],"sources":["version.ts"],"sourcesContent":["export const SDK_VERSION = '0.1.4-staging.5';\n"],"mappings":"AAAA,OAAO,MAAMA,WAAW,GAAG,iBAAiB","ignoreList":[]}
@@ -1 +1 @@
1
- export declare const SDK_VERSION = "0.1.4-staging.4";
1
+ export declare const SDK_VERSION = "0.1.4-staging.5";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/realtimekit-react-native",
3
- "version": "0.1.4-staging.4",
3
+ "version": "0.1.4-staging.5",
4
4
  "description": "Cloudflare RealtimeKit SDK for react native",
5
5
  "main": "lib/commonjs/index",
6
6
  "author": "Cloudflare",