diff --git a/src/livekit/useLiveKit.ts b/src/livekit/useLiveKit.ts
index dac6a052..adb5c72c 100644
--- a/src/livekit/useLiveKit.ts
+++ b/src/livekit/useLiveKit.ts
@@ -11,7 +11,7 @@ export type UserChoices = {
};
export type DeviceChoices = {
- selectedId: string;
+ selectedId?: string;
enabled: boolean;
};
diff --git a/src/room/GroupCallView.tsx b/src/room/GroupCallView.tsx
index 29d14b82..89a72002 100644
--- a/src/room/GroupCallView.tsx
+++ b/src/room/GroupCallView.tsx
@@ -279,6 +279,7 @@ export function GroupCallView({
setUserChoices(choices);
enter();
}}
+ muteAudio={participants.size > 8}
isEmbedded={isEmbedded}
hideHeader={hideHeader}
/>
diff --git a/src/room/LobbyView.tsx b/src/room/LobbyView.tsx
index 0f07ae7d..6b51542a 100644
--- a/src/room/LobbyView.tsx
+++ b/src/room/LobbyView.tsx
@@ -33,6 +33,7 @@ interface Props {
onEnter: (userChoices: UserChoices) => void;
isEmbedded: boolean;
hideHeader: boolean;
+ muteAudio: boolean;
}
export function LobbyView(props: Props) {
@@ -66,6 +67,7 @@ export function LobbyView(props: Props) {
diff --git a/src/room/VideoPreview.tsx b/src/room/VideoPreview.tsx
index 5fac133e..d39aeb17 100644
--- a/src/room/VideoPreview.tsx
+++ b/src/room/VideoPreview.tsx
@@ -40,10 +40,15 @@ export type MatrixInfo = {
interface Props {
matrixInfo: MatrixInfo;
+ muteAudio: boolean;
onUserChoicesChanged: (choices: UserChoices) => void;
}
-export function VideoPreview({ matrixInfo, onUserChoicesChanged }: Props) {
+export function VideoPreview({
+ matrixInfo,
+ muteAudio,
+ onUserChoicesChanged,
+}: Props) {
const { client } = useClient();
const [previewRef, previewBounds] = useMeasure({ polyfill: ResizeObserver });
@@ -64,7 +69,13 @@ export function VideoPreview({ matrixInfo, onUserChoicesChanged }: Props) {
// Create local media tracks.
const [videoEnabled, setVideoEnabled] = useState(true);
- const [audioEnabled, setAudioEnabled] = useState(true);
+ const [audioEnabled, setAudioEnabled] = useState(!muteAudio);
+
+ useEffect(() => {
+ if (muteAudio) {
+ setAudioEnabled(false);
+ }
+ }, [muteAudio]);
// The settings are updated as soon as the device changes. We wrap the settings value in a ref to store their initial value.
// Not changing the device options prohibits the usePreviewTracks hook to recreate the tracks.