From f24840d09ca4dc47c0438749fe5edaeb8d8a7fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=A0imon=20Brandner?= Date: Sat, 18 Sep 2021 12:31:54 +0200 Subject: [PATCH] Make CallFeed handle addTrack events MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Šimon Brandner --- src/webrtc/callFeed.ts | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/webrtc/callFeed.ts b/src/webrtc/callFeed.ts index d4287b1de..20533fc1b 100644 --- a/src/webrtc/callFeed.ts +++ b/src/webrtc/callFeed.ts @@ -48,6 +48,7 @@ export class CallFeed extends EventEmitter { private videoMuted: boolean, ) { super(); + this.updateStream(null, stream); if (this.hasAudioTrack) { this.initVolumeMeasuring(); @@ -58,6 +59,25 @@ export class CallFeed extends EventEmitter { return this.stream.getAudioTracks().length > 0; } + private updateStream(oldStream: MediaStream, newStream: MediaStream): void { + if (oldStream) { + oldStream.removeEventListener("addtrack", this.onAddTrack); + this.measureVolumeActivity(false); + } + if (newStream) { + this.stream = newStream; + newStream.addEventListener("addtrack", this.onAddTrack); + + if (this.hasAudioTrack) { + this.initVolumeMeasuring(); + } else { + this.measureVolumeActivity(false); + } + } + + this.emit(CallFeedEvent.NewStream, this.stream); + } + private initVolumeMeasuring(): void { const AudioContext = window.AudioContext || window.webkitAudioContext; if (!this.hasAudioTrack || !AudioContext) return; @@ -74,6 +94,10 @@ export class CallFeed extends EventEmitter { this.frequencyBinCount = new Float32Array(this.analyser.frequencyBinCount); } + private onAddTrack = (): void => { + this.emit(CallFeedEvent.NewStream, this.stream); + }; + /** * Returns callRoom member * @returns member of the callRoom @@ -116,14 +140,7 @@ export class CallFeed extends EventEmitter { * @param newStream new stream with which to replace the current one */ public setNewStream(newStream: MediaStream): void { - this.stream = newStream; - this.emit(CallFeedEvent.NewStream, this.stream); - - if (this.hasAudioTrack) { - this.initVolumeMeasuring(); - } else { - this.measureVolumeActivity(false); - } + this.updateStream(this.stream, newStream); } /**