From 8628123a53612a886c9672aa76f048f893875cdd Mon Sep 17 00:00:00 2001 From: Timo K Date: Tue, 19 Sep 2023 12:13:45 +0200 Subject: [PATCH] disable audio output beeing anything else then undefined Signed-off-by: Timo K --- src/livekit/MediaDevicesContext.tsx | 35 ++++++++++++++++------------- 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/src/livekit/MediaDevicesContext.tsx b/src/livekit/MediaDevicesContext.tsx index b109d3b9..6e376a34 100644 --- a/src/livekit/MediaDevicesContext.tsx +++ b/src/livekit/MediaDevicesContext.tsx @@ -65,7 +65,8 @@ function useObservableState( function useMediaDevice( kind: MediaDeviceKind, fallbackDevice: string | undefined, - usingNames: boolean + usingNames: boolean, + alwaysDefault: boolean = false ): MediaDevice { // Make sure we don't needlessly reset to a device observer without names, // once permissions are already given @@ -86,18 +87,19 @@ function useMediaDevice( const available = useObservableState(deviceObserver, []); const [selectedId, select] = useState(fallbackDevice); - return useMemo( - () => ({ + return useMemo(() => { + const devId = available.some((d) => d.deviceId === selectedId) + ? selectedId + : available.some((d) => d.deviceId === fallbackDevice) + ? fallbackDevice + : available.at(0)?.deviceId; + + return { available, - selectedId: available.some((d) => d.deviceId === selectedId) - ? selectedId - : available.some((d) => d.deviceId === fallbackDevice) - ? fallbackDevice - : available.at(0)?.deviceId, + selectedId: alwaysDefault ? undefined : devId, select, - }), - [available, selectedId, fallbackDevice, select] - ); + }; + }, [available, selectedId, fallbackDevice, select, alwaysDefault]); } const deviceStub: MediaDevice = { @@ -136,7 +138,8 @@ export const MediaDevicesProvider: FC = ({ children }) => { const audioOutput = useMediaDevice( "audiooutput", audioOutputSetting, - usingNames + false, + true ); const videoInput = useMediaDevice( "videoinput", @@ -149,10 +152,10 @@ export const MediaDevicesProvider: FC = ({ children }) => { setAudioInputSetting(audioInput.selectedId); }, [setAudioInputSetting, audioInput.selectedId]); - useEffect(() => { - if (audioOutput.selectedId !== undefined) - setAudioOutputSetting(audioOutput.selectedId); - }, [setAudioOutputSetting, audioOutput.selectedId]); + // useEffect(() => { + // if (audioOutput.selectedId !== undefined) + // setAudioOutputSetting(audioOutput.selectedId); + // }, [setAudioOutputSetting, audioOutput.selectedId]); useEffect(() => { if (videoInput.selectedId !== undefined)