@livedigital/client 3.25.4 → 3.25.6
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.
- package/dist/engine/handlers/ChannelAudioObserverEventHandler.d.ts +3 -0
- package/dist/engine/network/index.d.ts +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/engine/handlers/ChannelAudioObserverEventHandler.ts +29 -1
- package/src/engine/network/index.ts +2 -2
package/package.json
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { serializeError } from 'serialize-error';
|
|
2
|
+
import Peer from '../Peer';
|
|
2
3
|
import { LogMessageHandler, TrackLabel } from '../../types/common';
|
|
3
4
|
import Engine from '../index';
|
|
4
5
|
import Logger from '../Logger';
|
|
@@ -14,6 +15,10 @@ class ChannelAudioObserverEventHandler {
|
|
|
14
15
|
|
|
15
16
|
private readonly logger: Logger;
|
|
16
17
|
|
|
18
|
+
private currentActiveSpeaker: Peer | undefined;
|
|
19
|
+
|
|
20
|
+
private prevActiveSpeaker: Peer | undefined;
|
|
21
|
+
|
|
17
22
|
constructor(params: { engine: Engine, onLogMessage?: LogMessageHandler }) {
|
|
18
23
|
const { engine, onLogMessage } = params;
|
|
19
24
|
this.engine = engine;
|
|
@@ -23,6 +28,7 @@ class ChannelAudioObserverEventHandler {
|
|
|
23
28
|
onLogMessage,
|
|
24
29
|
sendAnalytics: engine.sendAnalytics,
|
|
25
30
|
});
|
|
31
|
+
this.watchPeersLeaves();
|
|
26
32
|
}
|
|
27
33
|
|
|
28
34
|
public handle(data: string): void {
|
|
@@ -56,13 +62,26 @@ class ChannelAudioObserverEventHandler {
|
|
|
56
62
|
private handleDominantSpeaker(payload: DominantSpeakerEvent): void {
|
|
57
63
|
const { peerId } = payload.data;
|
|
58
64
|
const peer = this.engine.getPeerById(peerId);
|
|
65
|
+
this.currentActiveSpeaker = peer;
|
|
66
|
+
this.prevActiveSpeaker = peer;
|
|
59
67
|
this.engine.setActiveSpeakerPeer(peer);
|
|
60
68
|
}
|
|
61
69
|
|
|
62
70
|
private handlePeerVolumes(payload: PeersVolumesEvent): void {
|
|
63
71
|
payload.volumes.forEach((item) => {
|
|
64
72
|
const { peerId, trackLabel, value } = item;
|
|
65
|
-
const
|
|
73
|
+
const peer = this.engine.getPeerById(peerId);
|
|
74
|
+
|
|
75
|
+
if (!peer) {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (value > 0 && !this.currentActiveSpeaker && peer.id === this.prevActiveSpeaker?.id) {
|
|
80
|
+
this.currentActiveSpeaker = peer;
|
|
81
|
+
this.engine.setActiveSpeakerPeer(peer);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const track = peer.tracks.get(trackLabel);
|
|
66
85
|
if (!track) {
|
|
67
86
|
return;
|
|
68
87
|
}
|
|
@@ -74,6 +93,7 @@ class ChannelAudioObserverEventHandler {
|
|
|
74
93
|
private handleSilence(): void {
|
|
75
94
|
const tracks = this.engine.peers.flatMap((peer) => Array.from(peer.tracks.values()));
|
|
76
95
|
tracks.forEach((track) => track.setVolume(0));
|
|
96
|
+
this.currentActiveSpeaker = undefined;
|
|
77
97
|
this.engine.setActiveSpeakerPeer(undefined);
|
|
78
98
|
}
|
|
79
99
|
|
|
@@ -122,6 +142,14 @@ class ChannelAudioObserverEventHandler {
|
|
|
122
142
|
}
|
|
123
143
|
}
|
|
124
144
|
|
|
145
|
+
private watchPeersLeaves(): void {
|
|
146
|
+
this.engine.clientEventEmitter.on('peer-left', (peerId) => {
|
|
147
|
+
if (peerId === this.currentActiveSpeaker?.id) {
|
|
148
|
+
this.engine.setActiveSpeakerPeer(undefined);
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
125
153
|
static throwInvalidPayload(): void {
|
|
126
154
|
throw new InvalidPayloadError('Invalid channel audio observer event handler payload');
|
|
127
155
|
}
|
|
@@ -64,7 +64,7 @@ class Network {
|
|
|
64
64
|
|
|
65
65
|
public receiveTransport?: Transport<TransportAppData>;
|
|
66
66
|
|
|
67
|
-
private preferRelay
|
|
67
|
+
private preferRelay?: boolean;
|
|
68
68
|
|
|
69
69
|
readonly #iceIntervalTimeouts: IceIntervalTimeouts = {
|
|
70
70
|
send: undefined,
|
|
@@ -376,7 +376,7 @@ class Network {
|
|
|
376
376
|
}
|
|
377
377
|
|
|
378
378
|
public getPreferRelay(): boolean {
|
|
379
|
-
return this.preferRelay;
|
|
379
|
+
return this.preferRelay ?? false;
|
|
380
380
|
}
|
|
381
381
|
|
|
382
382
|
public async getChannelPeers(role?: Role): Promise<{ peers: PeerResponse[] }> {
|