Make CallFeed handle addTrack events

Signed-off-by: Šimon Brandner <simon.bra.ag@gmail.com>
This commit is contained in:
Šimon Brandner
2021-09-18 12:31:54 +02:00
parent acb7991cc5
commit f24840d09c
+25 -8
View File
@@ -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);
}
/**