Set available devices to empty map on safari. Safari does not allow changing output devices so the output device dialog is confusing. (#3426)
* Set available devices to empty map on safari. Signed-off-by: Timo K <toger5@hotmail.de> * better safari check Signed-off-by: Timo K <toger5@hotmail.de> --------- Signed-off-by: Timo K <toger5@hotmail.de>
This commit is contained in:
@@ -181,7 +181,7 @@ interface StereoPanAudioTrackProps {
|
|||||||
/**
|
/**
|
||||||
* This wraps `livekit.AudioTrack` to allow adding audio nodes to a track.
|
* This wraps `livekit.AudioTrack` to allow adding audio nodes to a track.
|
||||||
* It main purpose is to remount the AudioTrack component when switching from
|
* It main purpose is to remount the AudioTrack component when switching from
|
||||||
* audiooContext to normal audio playback.
|
* audioContext to normal audio playback.
|
||||||
* As of now the AudioTrack component does not support adding audio nodes while being mounted.
|
* As of now the AudioTrack component does not support adding audio nodes while being mounted.
|
||||||
* @param param0
|
* @param param0
|
||||||
* @returns
|
* @returns
|
||||||
@@ -201,7 +201,7 @@ function AudioTrackWithAudioNodes({
|
|||||||
const [trackReady, setTrackReady] = useReactiveState(
|
const [trackReady, setTrackReady] = useReactiveState(
|
||||||
() => false,
|
() => false,
|
||||||
// We only want the track to reset once both (audioNodes and audioContext) are set.
|
// We only want the track to reset once both (audioNodes and audioContext) are set.
|
||||||
// for unsetting the audioContext its enough if one of the the is undefined.
|
// for unsetting the audioContext its enough if one of the two is undefined.
|
||||||
[audioContext && audioNodes],
|
[audioContext && audioNodes],
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ export const ActiveCall: FC<ActiveCallProps> = (props) => {
|
|||||||
?.disconnect()
|
?.disconnect()
|
||||||
.then(() => {
|
.then(() => {
|
||||||
logger.info(
|
logger.info(
|
||||||
`[Lifecycle] Disconnected from livekite room, state:${livekitRoom?.state}`,
|
`[Lifecycle] Disconnected from livekit room, state:${livekitRoom?.state}`,
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.catch((e) => {
|
.catch((e) => {
|
||||||
|
|||||||
@@ -224,7 +224,7 @@ class AudioOutput
|
|||||||
this.logger,
|
this.logger,
|
||||||
).pipe(
|
).pipe(
|
||||||
map((availableRaw) => {
|
map((availableRaw) => {
|
||||||
const available: Map<string, AudioOutputDeviceLabel> =
|
let available: Map<string, AudioOutputDeviceLabel> =
|
||||||
buildDeviceMap(availableRaw);
|
buildDeviceMap(availableRaw);
|
||||||
// Create a virtual default audio output for browsers that don't have one.
|
// Create a virtual default audio output for browsers that don't have one.
|
||||||
// Its device ID must be the empty string because that's what setSinkId
|
// Its device ID must be the empty string because that's what setSinkId
|
||||||
@@ -234,6 +234,12 @@ class AudioOutput
|
|||||||
type: "default",
|
type: "default",
|
||||||
name: availableRaw[0]?.label || null,
|
name: availableRaw[0]?.label || null,
|
||||||
});
|
});
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||||
|
const isSafari = !!(window as any).GestureEvent; // non standard api only found on Safari. https://developer.mozilla.org/en-US/docs/Web/API/GestureEvent#browser_compatibility
|
||||||
|
if (isSafari) {
|
||||||
|
// set to empty map if we are on Safari, because it does not support setSinkId
|
||||||
|
available = new Map();
|
||||||
|
}
|
||||||
// Note: creating virtual default input devices would be another problem
|
// Note: creating virtual default input devices would be another problem
|
||||||
// entirely, because requesting a media stream from deviceId "" won't
|
// entirely, because requesting a media stream from deviceId "" won't
|
||||||
// automatically track the default device.
|
// automatically track the default device.
|
||||||
|
|||||||
Reference in New Issue
Block a user