Merge pull request #1910 from vector-im/dbkr/fix_no_media_perms

Fix joining calls with no media permission
This commit is contained in:
David Baker
2023-11-21 09:18:00 +00:00
committed by GitHub
3 changed files with 39 additions and 21 deletions

View File

@@ -72,35 +72,37 @@ async function doConnect(
} }
logger.info("Pre-creating microphone track"); logger.info("Pre-creating microphone track");
const audioTracks = await livekitRoom!.localParticipant.createTracks({ let preCreatedAudioTrack: LocalTrack | undefined;
audio: audioOptions, try {
}); const audioTracks = await livekitRoom!.localParticipant.createTracks({
if (audioTracks.length < 1) { audio: audioOptions,
logger.info("Tried to pre-create local audio track but got no tracks"); });
return; if (audioTracks.length < 1) {
logger.info("Tried to pre-create local audio track but got no tracks");
} else {
preCreatedAudioTrack = audioTracks[0];
}
logger.info("Pre-created microphone track");
} catch (e) {
logger.error("Failed to pre-create microphone track", e);
} }
if (!audioEnabled) await audioTracks[0].mute();
logger.info("Pre-created microphone track"); if (!audioEnabled) await preCreatedAudioTrack?.mute();
// check again having awaited for the track to create // check again having awaited for the track to create
if (livekitRoom!.localParticipant.getTrack(Track.Source.Microphone)) { if (livekitRoom!.localParticipant.getTrack(Track.Source.Microphone)) {
logger.warn( logger.warn(
"Publishing pre-created audio track but participant already appears to have an microphone track: this shouldn't happen!", "Pre-created audio track but participant already appears to have an microphone track: this shouldn't happen!",
); );
for (const t of audioTracks) { preCreatedAudioTrack?.stop();
t.stop();
}
return; return;
} }
logger.info("Connecting & publishing"); logger.info("Connecting & publishing");
try { try {
await connectAndPublish(livekitRoom, sfuConfig, audioTracks[0], []); await connectAndPublish(livekitRoom, sfuConfig, preCreatedAudioTrack, []);
} catch (e) { } catch (e) {
for (const t of audioTracks) { preCreatedAudioTrack?.stop();
t.stop();
}
} }
} }

View File

@@ -245,11 +245,25 @@ export function useLiveKit(
); );
} }
} catch (e) { } catch (e) {
logger.error( if ((e as DOMException).name === "NotAllowedError") {
"Failed to sync audio mute state with LiveKit (will retry to sync in 1s):", logger.error(
e, "Fatal errror while syncing mute state: resetting",
); e,
setTimeout(() => syncMuteState(iterCount + 1, type), 1000); );
if (type === MuteDevice.Microphone) {
audioMuteUpdating.current = false;
muteStates.audio.setEnabled?.(false);
} else {
videoMuteUpdating.current = false;
muteStates.video.setEnabled?.(false);
}
} else {
logger.error(
"Failed to sync audio mute state with LiveKit (will retry to sync in 1s):",
e,
);
setTimeout(() => syncMuteState(iterCount + 1, type), 1000);
}
} }
} }
}; };

View File

@@ -82,6 +82,8 @@ export const VideoPreview: FC<Props> = ({
}, },
(error) => { (error) => {
logger.error("Error while creating preview Tracks:", error); logger.error("Error while creating preview Tracks:", error);
muteStates.audio.setEnabled?.(false);
muteStates.video.setEnabled?.(false);
}, },
); );
const videoTrack = useMemo( const videoTrack = useMemo(