所以我正在制作一个电子项目,用desktopCapture记录您的屏幕和桌面或选定应用程序的音频。 我得到了屏幕记录,甚至一度让麦克风可以工作,但在任何时候,无论我尝试什么,我都无法录制桌面音频或任何应用程序的音频。经过一些研究,我发现你无法在 Linux 上使用 chromium 录制任何桌面或应用程序的音频。
那么尝试录制桌面音频的解决方案或其他方法是什么?也许有某种方法可以使用不同的库录制桌面音频,然后以某种方式将视频与音频结合起来。
如有任何建议,我们将不胜感激。
屏幕录像机本身的代码:
videoSelectBtn.onclick = getVideoSources;
async function getVideoSources() {
const inputSources = await desktopCapturer.getSources({
types: ["window", "screen", "audio"],
});
inputSources.forEach((source) => {
if (source.name === "Screen 1") {
selectSource(source);
} else {
console.log(source);
}
});
}
async function selectSource(source) {
videoSelectBtn.innerText = source.name;
const constraints = {
audio: {
mandatory: {
chromeMediaSource: "desktop",
},
},
video: {
mandatory: {
chromeMediaSource: "desktop",
},
},
};
const stream = await navigator.mediaDevices.getUserMedia(constraints);
videoElement.srcObject = stream;
videoElement.play();
const options = {
mimeType: "video/webm; codecs=vp9",
};
mediaRecorder = new MediaRecorder(stream, options);
mediaRecorder.ondataavailable = handleDataAvailable;
mediaRecorder.onstop = handleStop;
}
function handleDataAvailable(e) {
console.log("video data available");
recordedChunks.push(e.data);
}
async function handleStop(e) {
const blob = new Blob(recordedChunks, {
type: "video/webm; codecs=vp9",
});
const buffer = Buffer.from(await blob.arrayBuffer());
const { filePath } = await dialog.showSaveDialog({
buttonLabel: "Save video",
defaultPath: `vid-${Date.now()}.webm`,
});
if (filePath) {
writeFile(filePath, buffer, () => console.log("video saved successfully!"));
}
}
这似乎与 Chrome 相关,Chrome 不允许从计算机或桌面录制其他音频源,并且由于 Electron 依赖于 Chromium,引擎现在正在阻止该功能。
有关 mac 的官方文档中提到了此警告:https://www.electronjs.org/docs/latest/api/desktop-capturer#caveats - 但主要涉及 macOS。