是否可以直接向 Puppeteer 获取 Puppeteer 音频馈送和/或输入音频?

dav*_*pen 10 node.js google-chrome-headless puppeteer

我想将 WAV 或 MP3 作为麦克风输入 puppeteer,但是在无头模式下,应用程序被静音,所以我想知道是否有办法将输入直接输入到浏览器中。

我还想知道是否可以在无头状态下从浏览器获取音频源,和/或录制音频并将其放在文件夹中。

Fli*_*imm 8

我最终使用了这个解决方案。首先,我为 Chromium 启用了一些选项:

const browser = await puppeteer.launch({
  args: [
    '--use-fake-ui-for-media-stream',
  ],
  ignoreDefaultArgs: ['--mute-audio'],
});
Run Code Online (Sandbox Code Playgroud)

如果 Chromium 已经打开,请记住关闭它。

我创建了一个<audio>元素,该元素src设置为我想要输入的文件。我也覆盖了navigator.mediaDevices.getUserMedia,以便它返回Promise与音频文件相同的流,而不是来自麦克风。

const page = await browser.newPage();
await page.goto('http://example.com', {waitUntil: 'load'});
await page.evaluate(() => {
  var audio = document.createElement("audio");
  audio.setAttribute("src", "http://example.com/example.mp3");
  audio.setAttribute("crossorigin", "anonymous");
  audio.setAttribute("controls", "");
  audio.onplay = function() {
    var stream = audio.captureStream();
    navigator.mediaDevices.getUserMedia = async function() {
       return stream;
    };
  });
  document.querySelector("body").appendChild(audio);
});
Run Code Online (Sandbox Code Playgroud)

现在,只要网站的代码调用navigator.mediaDevices.getUserMedia,它就会从文件中获取音频流。(您需要先确保音频正在播放。)


小智 2

不确定作为麦克风输入是什么意思,但您可以在无头模式下启用音频。这应该有效:

const browser = await puppeteer.launch({
   ignoreDefaultArgs: ['--mute-audio']
});
Run Code Online (Sandbox Code Playgroud)