added platform checks and error handling when virtmic is not present
This commit is contained in:
parent
19c4ea2524
commit
ba83bf6ff7
2 changed files with 45 additions and 35 deletions
|
@ -1,5 +1,7 @@
|
||||||
const original = navigator.mediaDevices.getDisplayMedia;
|
import { isLinux } from "../utils";
|
||||||
async function getVirtmic() {
|
if (isLinux) {
|
||||||
|
const original = navigator.mediaDevices.getDisplayMedia;
|
||||||
|
async function getVirtmic() {
|
||||||
const getAudioDevice = async (deviceName: string|undefined) => {;
|
const getAudioDevice = async (deviceName: string|undefined) => {;
|
||||||
let devices = await navigator.mediaDevices.enumerateDevices();
|
let devices = await navigator.mediaDevices.enumerateDevices();
|
||||||
let audioDevice = devices.find(({
|
let audioDevice = devices.find(({
|
||||||
|
@ -14,14 +16,14 @@ async function getVirtmic() {
|
||||||
id = myDiscordAudioSink?.deviceId;
|
id = myDiscordAudioSink?.deviceId;
|
||||||
}
|
}
|
||||||
catch (error) {
|
catch (error) {
|
||||||
id = 'default';
|
id = 'error';
|
||||||
}
|
}
|
||||||
return id;
|
return id;
|
||||||
};
|
};
|
||||||
navigator.mediaDevices.getDisplayMedia = async function() {
|
navigator.mediaDevices.getDisplayMedia = async function() {
|
||||||
const id = await getVirtmic();
|
const id = await getVirtmic();
|
||||||
const stream = await original.apply(this);
|
const stream = await original.apply(this);
|
||||||
|
if (id !== 'error'){
|
||||||
const audio = await navigator.mediaDevices.getUserMedia({
|
const audio = await navigator.mediaDevices.getUserMedia({
|
||||||
audio: {
|
audio: {
|
||||||
deviceId: {
|
deviceId: {
|
||||||
|
@ -30,7 +32,14 @@ navigator.mediaDevices.getDisplayMedia = async function() {
|
||||||
autoGainControl: false,
|
autoGainControl: false,
|
||||||
echoCancellation: false,
|
echoCancellation: false,
|
||||||
noiseSuppression: false
|
noiseSuppression: false
|
||||||
} });
|
}
|
||||||
|
});
|
||||||
audio.getAudioTracks().forEach(t => stream.addTrack(t));
|
audio.getAudioTracks().forEach(t => stream.addTrack(t));
|
||||||
|
} else {
|
||||||
|
const audio = await navigator.mediaDevices.getUserMedia({ audio: false });
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
return stream;
|
return stream;
|
||||||
}
|
};
|
||||||
|
};
|
|
@ -17,3 +17,4 @@ const { platform } = navigator;
|
||||||
|
|
||||||
export const isWindows = platform.startsWith("Win");
|
export const isWindows = platform.startsWith("Win");
|
||||||
export const isMac = platform.startsWith("Mac");
|
export const isMac = platform.startsWith("Mac");
|
||||||
|
export const isLinux = platform.startsWith("Linux");
|
||||||
|
|
Reference in a new issue