如何用Electron跨平台录制音视频

问题描述 投票:0回答:1

所以我正在制作一个电子项目,用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!"));
  }
}
javascript node.js audio electron
1个回答
0
投票

这似乎与 Chrome 相关,Chrome 不允许从计算机或桌面录制其他音频源,并且由于 Electron 依赖于 Chromium,引擎现在正在阻止该功能。

有关 mac 的官方文档中提到了此警告:https://www.electronjs.org/docs/latest/api/desktop-capturer#caveats - 但主要涉及 macOS。

© www.soinside.com 2019 - 2024. All rights reserved.