Skip to content

Commit 30f1734

Browse files
authored
fix: fix useMultibandTrackVolume and useTrackVolume infinite rerender (#216)
* fix: fix useMultibandTrackVolume and useTrackVolume infinitely rerendering * chore: lint
1 parent 8580915 commit 30f1734

File tree

3 files changed

+33
-25
lines changed

3 files changed

+33
-25
lines changed

example/yarn.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2163,12 +2163,12 @@ __metadata:
21632163
languageName: node
21642164
linkType: hard
21652165

2166-
"@livekit/protocol@npm:1.33.0":
2167-
version: 1.33.0
2168-
resolution: "@livekit/protocol@npm:1.33.0"
2166+
"@livekit/protocol@npm:1.34.0":
2167+
version: 1.34.0
2168+
resolution: "@livekit/protocol@npm:1.34.0"
21692169
dependencies:
21702170
"@bufbuild/protobuf": ^1.10.0
2171-
checksum: 00609412a17326b1d6c145d137e4ca97448b1fc6b295ed0c1d9714b029cd5a004b96baa7ee7fb53fb5569180f7af63546299224c03f3ce9899d30e8d41a7a8b7
2171+
checksum: e08d0ceb20e5434b352e0c42f89d13f29edbf853a968924aea9792660d79edc13a535288d05a47da97843e1e3a66917adb79ee51b8652442d42123e5f75f649c
21722172
languageName: node
21732173
linkType: hard
21742174

@@ -6103,19 +6103,19 @@ __metadata:
61036103
linkType: hard
61046104

61056105
"livekit-client@npm:^2.9.0":
6106-
version: 2.9.2
6107-
resolution: "livekit-client@npm:2.9.2"
6106+
version: 2.9.8
6107+
resolution: "livekit-client@npm:2.9.8"
61086108
dependencies:
61096109
"@livekit/mutex": 1.1.1
6110-
"@livekit/protocol": 1.33.0
6110+
"@livekit/protocol": 1.34.0
61116111
events: ^3.3.0
61126112
loglevel: ^1.9.2
61136113
sdp-transform: ^2.15.0
61146114
ts-debounce: ^4.0.0
61156115
tslib: 2.8.1
61166116
typed-emitter: ^2.1.0
61176117
webrtc-adapter: ^9.0.1
6118-
checksum: c12b33b99bfaa01ed14307a34190c273982c49781d16430fab6ca597ba4c6fa1ee49b2d73bfe2670e9779c60ec35bc93936324a0f9e12b236c5d53bb6b2374b6
6118+
checksum: cc01e43fbf5fa298c6696a3a084852d04cd818c554e9b3b9469ad22e85b8d29a975d96072d8432aff79651337f2950881c266117d0490c8ab94112dfda789ca4
61196119
languageName: node
61206120
linkType: hard
61216121

src/hooks/useMultibandTrackVolume.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export function useMultibandTrackVolume(
4949
| LocalAudioTrack
5050
| RemoteAudioTrack
5151
| TrackReferenceOrPlaceholder,
52-
options: MultiBandTrackVolumeOptions = {}
52+
options?: MultiBandTrackVolumeOptions
5353
) {
5454
const track =
5555
trackOrTrackReference instanceof Track
@@ -59,39 +59,44 @@ export function useMultibandTrackVolume(
5959
);
6060
const opts = useMemo(() => {
6161
return { ...multibandDefaults, ...options };
62-
}, [options]);
62+
63+
// disabled due to use of JSON.stringify, dependencies are reference equality
64+
// eslint-disable-next-line react-hooks/exhaustive-deps
65+
}, [JSON.stringify(options)]);
6366
const mediaStreamTrack = track?.mediaStreamTrack;
67+
const hasMediaStreamTrack = mediaStreamTrack != null;
68+
const peerConnectionId = mediaStreamTrack?.peerConnectionId ?? -1;
69+
const mediaStreamTrackId = mediaStreamTrack?.id;
6470

6571
let [magnitudes, setMagnitudes] = useState<number[]>([]);
6672
useEffect(() => {
6773
let listener = Object();
6874
let reactTag: string | null = null;
69-
if (mediaStreamTrack) {
75+
if (hasMediaStreamTrack) {
7076
reactTag = LiveKitModule.createMultibandVolumeProcessor(
7177
opts,
72-
mediaStreamTrack._peerConnectionId ?? -1,
73-
mediaStreamTrack.id
78+
peerConnectionId,
79+
mediaStreamTrackId
7480
);
7581
addListener(listener, 'LK_MULTIBAND_PROCESSED', (event: any) => {
7682
if (event.magnitudes && reactTag && event.id === reactTag) {
77-
console.log('event received: ', event.magnitudes[0]);
7883
setMagnitudes(event.magnitudes);
7984
}
8085
});
8186
}
8287
return () => {
83-
if (mediaStreamTrack) {
88+
if (hasMediaStreamTrack) {
8489
removeListener(listener);
8590
if (reactTag) {
8691
LiveKitModule.deleteMultibandVolumeProcessor(
8792
reactTag,
88-
mediaStreamTrack._peerConnectionId ?? -1,
89-
mediaStreamTrack.id
93+
peerConnectionId,
94+
mediaStreamTrackId
9095
);
9196
}
9297
}
9398
};
94-
}, [mediaStreamTrack, opts]);
99+
}, [hasMediaStreamTrack, peerConnectionId, mediaStreamTrackId, opts]);
95100

96101
return magnitudes;
97102
}

src/hooks/useTrackVolume.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,18 @@ export function useTrackVolume(
2828
);
2929

3030
const mediaStreamTrack = track?.mediaStreamTrack;
31+
const hasMediaStreamTrack = mediaStreamTrack != null;
32+
const peerConnectionId = mediaStreamTrack.peerConnectionId ?? -1;
33+
const mediaStreamTrackId = mediaStreamTrack.id;
3134

3235
let [volume, setVolume] = useState(0.0);
3336
useEffect(() => {
3437
let listener = Object();
3538
let reactTag: string | null = null;
36-
if (mediaStreamTrack) {
39+
if (hasMediaStreamTrack) {
3740
reactTag = LiveKitModule.createVolumeProcessor(
38-
mediaStreamTrack._peerConnectionId ?? -1,
39-
mediaStreamTrack.id
41+
peerConnectionId,
42+
mediaStreamTrackId
4043
);
4144
addListener(listener, 'LK_VOLUME_PROCESSED', (event: any) => {
4245
if (event.volume && reactTag && event.id === reactTag) {
@@ -45,18 +48,18 @@ export function useTrackVolume(
4548
});
4649
}
4750
return () => {
48-
if (mediaStreamTrack) {
51+
if (hasMediaStreamTrack) {
4952
removeListener(listener);
5053
if (reactTag) {
5154
LiveKitModule.deleteVolumeProcessor(
5255
reactTag,
53-
mediaStreamTrack._peerConnectionId ?? -1,
54-
mediaStreamTrack.id
56+
peerConnectionId,
57+
mediaStreamTrackId
5558
);
5659
}
5760
}
5861
};
59-
}, [mediaStreamTrack]);
62+
}, [hasMediaStreamTrack, peerConnectionId, mediaStreamTrackId]);
6063

6164
return volume;
6265
}

0 commit comments

Comments
 (0)