openvidu-components: Released media devices on videoconference destroy

pull/715/head
csantosm 2022-04-11 13:34:12 +02:00
parent 628b62c0aa
commit 493f1e3ba0
3 changed files with 19 additions and 12 deletions

View File

@ -79,7 +79,6 @@ export class PreJoinComponent implements OnInit, OnDestroy {
if (this.screenShareStateSubscription) {
this.screenShareStateSubscription.unsubscribe();
}
this.deviceSrv.clear();
}
async onCameraSelected(event: any) {

View File

@ -359,6 +359,8 @@ export class VideoconferenceComponent implements OnInit, OnDestroy, AfterViewIni
ngOnDestroy(): void {
if (this.prejoinSub) this.prejoinSub.unsubscribe();
if (this.participantNameSub) this.participantNameSub.unsubscribe();
this.deviceSrv.clear();
this.openviduService.clear();
}
/**

View File

@ -60,6 +60,16 @@ export class OpenViduService {
}
}
/**
* @internal
*/
clear() {
this.videoSource = undefined;
this.audioSource = undefined;
this.stopTracks(this.participantService.getMyCameraPublisher()?.stream?.getMediaStream());
this.stopTracks(this.participantService.getMyScreenPublisher()?.stream?.getMediaStream());
}
/**
*
* Returns the local Session. See {@link https://docs.openvidu.io/en/stable/api/openvidu-browser/classes/Session.html Session} object.
@ -130,10 +140,6 @@ export class OpenViduService {
disconnect() {
this.disconnectSession(this.webcamSession);
this.disconnectSession(this.screenSession);
this.videoSource = undefined;
this.audioSource = undefined;
// this.stopTracks(this.participantService.getMyCameraPublisher()?.stream?.getMediaStream());
// this.stopTracks(this.participantService.getMyScreenPublisher()?.stream?.getMediaStream());
}
/**
@ -567,11 +573,11 @@ export class OpenViduService {
}
}
// private stopTracks(mediaStream: MediaStream) {
// if (mediaStream) {
// mediaStream?.getAudioTracks().forEach((track) => track.stop());
// mediaStream?.getVideoTracks().forEach((track) => track.stop());
// // this.webcamMediaStream?.getAudioTracks().forEach((track) => track.stop());
// }
// }
private stopTracks(mediaStream: MediaStream) {
if (mediaStream) {
mediaStream?.getAudioTracks().forEach((track) => track.stop());
mediaStream?.getVideoTracks().forEach((track) => track.stop());
// this.webcamMediaStream?.getAudioTracks().forEach((track) => track.stop());
}
}
}