Google Chrome Headless Error "Not supported" 当使用 getDisplayMedia 尝试从 Puppeteer 中的 Chrome 选项卡录制屏幕时
Google Chrome Headless Error "Not supported" When using getDisplayMedia trying to record screen from Chrome Tab in Puppeteer
我正在使用带有 Chromium 80 的 Puppeteer 最新版本,我正在尝试从 chrome 无头页面录制视频并打开所有这些标志:
{
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 上,它也会说它是 Not supported
。
如果 --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) 或任何扩展。
此问题已报告为错误 Here,GitHub 上的人也遇到了同样的问题。这似乎是一个错误,目前尚不清楚他们何时会修复它。
同时您可以使用 puppeteer-video-recorder
plugin,它显然可以在无头和有头模式下工作。
Does it record videos in headless Chrome?
Yes it does.
但是因为它使用了FFMPEG
,视频的创建似乎很慢。
总之,希望你能用得上,对你有帮助。
我正在使用带有 Chromium 80 的 Puppeteer 最新版本,我正在尝试从 chrome 无头页面录制视频并打开所有这些标志:
{
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 上,它也会说它是 Not supported
。
如果 --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) 或任何扩展。
此问题已报告为错误 Here,GitHub 上的人也遇到了同样的问题。这似乎是一个错误,目前尚不清楚他们何时会修复它。
同时您可以使用 puppeteer-video-recorder
plugin,它显然可以在无头和有头模式下工作。
Does it record videos in headless Chrome?
Yes it does.
但是因为它使用了FFMPEG
,视频的创建似乎很慢。
总之,希望你能用得上,对你有帮助。