使用Puppeteer在Chrome Tab中调用getDisplayMedia录制屏幕时,遇到Google Chrome Headless错误"不受支持"。

9

我正在使用最新版本的 Puppeteer,以及 Chromium 80,并尝试在 Chrome headless 中从页面录制视频,已经打开了所有这些标志:

{
  headless: true,
  devtools: false,
  args: [
    '--no-sandbox',
    '--allow-insecure-localhost',
    '--enable-usermedia-screen-capturing',
    '--use-fake-ui-for-media-stream', // In headless: false it will capture display rather than tab and in headless: true doesn't work
    '--auto-select-desktop-capture-source=[RECORD]', //[RECORD] is the title of my localhost page trying to screen capture
    '--remote-debugging-port=9222',
    '--window-size=1440,900',
  ],
  ignoreDefaultArgs: [
    '--mute-audio',
    '--disable-media-session-api',
  ]
}

在 Windows 上,如果headless : false,它将捕获 Chrome 标签(有时会崩溃)。但是,如果headless : true,即使在 Windows 上,它也显示为不支持
如果打开了--use-fake-ui-for-media-stream标志,则情况就另当别论,无论headless是真还是假,它都会捕获我的其中一个显示器。
现在我想在我的 Linux 服务器上使用它,因为那里没有显示器,我只希望 Chrome 的headless : true能够捕获我的 Chrome 标签。我知道它可以做到这一点,因为在 DevTools 中,我可以看到它以headless : true模式显示屏幕。如果它在 DevTools 中创建了一个显示器,那么它必须能够在屏幕捕捉时创建显示器。我想,在 Puppeteer 上必须打开其他标志,才能允许它这样做。我正在使用navigator.mediaDevices.getDisplayMedia来获取屏幕数据。
我还尝试过这个视频配置,但它没有成功(崩溃),显然只适用于扩展程序,我需要从后台获取源 ID。
screenStream = await navigator.mediaDevices.getDisplayMedia({
        video: {
            //mandatory: {
            //    chromeMediaSource: 'tab', // Not using this!
            //}
        },
        audio: false
});

有没有人知道在Puppeteer中还应该考虑哪些标志?

请注意,我不想在我的Chrome headless中使用xvfb和Selenium(WebDrive)或任何扩展程序。


你最终解决了这个问题吗?我也在尝试做同样的事情,以便在CI中调试失败的测试。 - Kyle
不是很确定,但我认为最好的方法是逐帧截屏并使用ffmpeg将其转换为视频。这是我能想到的唯一解决方案。 - Hirad Nikoo
1个回答

1
这个问题被报告为一个错误,GitHub上的人们也遇到了同样的问题。看起来这是一个错误,目前还不清楚他们什么时候会修复它。
与此同时,您可以使用puppeteer-video-recorder插件,它似乎在无头和有头模式下都有效。

它能在无头Chrome中录制视频吗?

可以。

但由于它使用FFMPEG,视频的创建似乎很慢。无论如何,希望这对您有所帮助。

任何想要解决这个问题的人都应该前往点赞此问题,以向Chromium团队表明在无头模式下需要getDisplayMedia - Vaviloff
谢谢您的回复。我在2020年3月遇到了这个问题,本应该向Chromioum团队提出问题,但我决定用另一种方式解决我的问题,现在看来是由其他人创建的puppeteer扩展程序。我很失望自己为什么没有尝试将我的解决方案作为扩展程序共享或警告chromium团队。希望这能成为教训,让我更积极地参与社区。谢谢您的回复。 :) - Hirad Nikoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接