From 8a236e1b67a60907423cf8b9d17604d0036cc26d Mon Sep 17 00:00:00 2001 From: Carlos Santos <4a.santos@gmail.com> Date: Sat, 23 Aug 2025 11:31:28 +0200 Subject: [PATCH] ov-components: update audio device change handling and improve track retrieval logic --- .../pre-join/pre-join.component.html | 2 +- .../components/pre-join/pre-join.component.ts | 26 ++++++++++++++++--- .../lib/services/openvidu/openvidu.service.ts | 9 +++---- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/pre-join/pre-join.component.html b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/pre-join/pre-join.component.html index 1ee1ac1a..ee8ebab8 100644 --- a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/pre-join/pre-join.component.html +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/components/pre-join/pre-join.component.html @@ -49,7 +49,7 @@
track.kind === 'video'); + const newVideoTrack = updatedTracks.find((track) => track.kind === Track.Kind.Video); // if (newVideoTrack && newVideoTrack !== this.videoTrack) { this.tracks = updatedTracks; @@ -260,6 +260,26 @@ export class PreJoinComponent implements OnInit, OnDestroy { this.hasVideoDevices = devices.length > 0; } + audioDeviceChanged(device: CustomDevice) { + try { + this.log.d('Audio device changed to:', device); + + // Get the updated tracks from the service + const updatedTracks = this.openviduService.getLocalTracks(); + + // Find the new audio track + const newAudioTrack = updatedTracks.find((track) => track.kind === Track.Kind.Audio); + + this.tracks = updatedTracks; + this.audioTrack = newAudioTrack; + + this.onAudioDeviceChanged.emit(device); + } catch (error) { + this.log.e('Error handling audio device change:', error); + this.handleError(error); + } + } + async audioEnabledChanged(enabled: boolean) { if (enabled && !this.audioTrack) { const newAudioTrack = await this.openviduService.createLocalTracks(false, true); @@ -316,8 +336,8 @@ export class PreJoinComponent implements OnInit, OnDestroy { try { this.tracks = await this.openviduService.createLocalTracks(); this.openviduService.setLocalTracks(this.tracks); - this.videoTrack = this.tracks.find((track) => track.kind === 'video'); - this.audioTrack = this.tracks.find((track) => track.kind === 'audio'); + this.videoTrack = this.tracks.find((track) => track.kind === Track.Kind.Video); + this.audioTrack = this.tracks.find((track) => track.kind === Track.Kind.Audio); this.isVideoEnabled = this.openviduService.isVideoTrackEnabled(); return; // Success, exit retry loop diff --git a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/services/openvidu/openvidu.service.ts b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/services/openvidu/openvidu.service.ts index 1174c84b..793fd31e 100644 --- a/openvidu-components-angular/projects/openvidu-components-angular/src/lib/services/openvidu/openvidu.service.ts +++ b/openvidu-components-angular/projects/openvidu-components-angular/src/lib/services/openvidu/openvidu.service.ts @@ -402,11 +402,11 @@ export class OpenViduService { const existingTrack = this.localTracks.find((track) => track.kind === Track.Kind.Video) as LocalVideoTrack; if (existingTrack) { - //TODO: SHould use replace track using restartTrack + //TODO: Should use replace track using restartTrack // Try to restart existing track this.removeVideoTrack(); // try { - // await existingTrack.restartTrack({ deviceId: deviceId }); + // await existingTrack.restartTrack({ deviceId: deviceId }); // this.log.d('Camera switched successfully using existing track'); // return; // } catch (error) { @@ -424,7 +424,6 @@ export class OpenViduService { const videoTrack = newVideoTracks.find((t) => t.kind === Track.Kind.Video); if (videoTrack) { - // Mute if camera is disabled in settings if (!this.deviceService.isCameraEnabled()) { await videoTrack.mute(); @@ -448,8 +447,8 @@ export class OpenViduService { const existingTrack = this.localTracks?.find((track) => track.kind === Track.Kind.Audio) as LocalAudioTrack; if (existingTrack) { - this.removeAudioTrack(); - //TODO: SHould use replace track using restartTrack + this.removeAudioTrack(); + //TODO: Should use replace track using restartTrack // Try to restart existing track // try { // await existingTrack.restartTrack({ deviceId: deviceId });