From 2f08cd89843062a22c545d2e45d97bd9843d7ae6 Mon Sep 17 00:00:00 2001 From: Bruno Windels <274386+bwindels@users.noreply.github.com> Date: Thu, 7 Jul 2022 15:36:49 +0200 Subject: [PATCH] clone localMedia in Member when connection, like we do for setMedia --- src/matrix/calls/group/GroupCall.ts | 3 +-- src/matrix/calls/group/Member.ts | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/matrix/calls/group/GroupCall.ts b/src/matrix/calls/group/GroupCall.ts index 087dc1ff..32052cc3 100644 --- a/src/matrix/calls/group/GroupCall.ts +++ b/src/matrix/calls/group/GroupCall.ts @@ -510,8 +510,7 @@ export class GroupCall extends EventEmitter<{change: never}> { const logItem = joinedData.membersLogItem.child({l: "member", id: memberKey}); logItem.set("sessionId", member.sessionId); log.wrap({l: "connect", id: memberKey}, log => { - // Safari can't send a MediaStream to multiple sources, so clone it - const connectItem = member.connect(joinedData.localMedia.clone(), joinedData.localMuteSettings, logItem); + const connectItem = member.connect(joinedData.localMedia, joinedData.localMuteSettings, logItem); if (connectItem) { log.refDetached(connectItem); } diff --git a/src/matrix/calls/group/Member.ts b/src/matrix/calls/group/Member.ts index b6461e6a..9f370d6f 100644 --- a/src/matrix/calls/group/Member.ts +++ b/src/matrix/calls/group/Member.ts @@ -116,7 +116,8 @@ export class Member { if (this.connection) { return; } - const connection = new MemberConnection(localMedia, localMuteSettings, memberLogItem); + // Safari can't send a MediaStream to multiple sources, so clone it + const connection = new MemberConnection(localMedia.clone(), localMuteSettings, memberLogItem); this.connection = connection; let connectLogItem; connection.logItem.wrap("connect", async log => { @@ -293,7 +294,6 @@ export class Member { async setMedia(localMedia: LocalMedia, previousMedia: LocalMedia): Promise { const {connection} = this; if (connection) { - // TODO: see if we can simplify this connection.localMedia = localMedia.replaceClone(connection.localMedia, previousMedia); await connection.peerCall?.setMedia(connection.localMedia, connection.logItem); }