From b41e903fca5c40ebf974208ea15ae09d16c9a608 Mon Sep 17 00:00:00 2001 From: Jage9 Date: Wed, 25 Feb 2026 02:20:09 -0500 Subject: [PATCH] Fix outbound audio track attach for pre-media peers --- client/public/version.js | 2 +- client/src/webrtc/peerManager.ts | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/client/public/version.js b/client/public/version.js index e118dab..e338ace 100644 --- a/client/public/version.js +++ b/client/public/version.js @@ -1,5 +1,5 @@ // Maintainer-controlled web client version. // Format: YYYY.MM.DD Rn (example: 2026.02.20 R2) -window.CHGRID_WEB_VERSION = "2026.02.25 R264"; +window.CHGRID_WEB_VERSION = "2026.02.25 R265"; // Optional display timezone for timestamps. Falls back to America/Detroit if unset/invalid. window.CHGRID_TIME_ZONE = "America/Detroit"; diff --git a/client/src/webrtc/peerManager.ts b/client/src/webrtc/peerManager.ts index 8822612..1512c50 100644 --- a/client/src/webrtc/peerManager.ts +++ b/client/src/webrtc/peerManager.ts @@ -113,12 +113,19 @@ export class PeerManager { } async replaceOutgoingTrack(stream: MediaStream): Promise { + const newTrack = stream.getAudioTracks()[0]; + if (!newTrack) { + return; + } for (const peer of this.peers.values()) { - const sender = peer.pc.getSenders().find((candidate) => candidate.track?.kind === 'audio'); - const newTrack = stream.getAudioTracks()[0]; - if (sender && newTrack) { - await sender.replaceTrack(newTrack); - } + const sender = + peer.pc.getSenders().find((candidate) => candidate.track?.kind === 'audio') ?? + peer.pc + .getTransceivers() + .find((transceiver) => transceiver.receiver.track?.kind === 'audio' || transceiver.sender.track?.kind === 'audio') + ?.sender; + if (!sender) continue; + await sender.replaceTrack(newTrack); } }