Ubuntu下Puppeteer调用MediaRecorder API捕获屏幕报NotReadableError
Ubuntu下Puppeteer调用getDisplayMedia报NotReadableError的解决方法
问题描述
在Ubuntu Linux系统中使用Puppeteer结合MediaRecorder API捕获屏幕媒体时,调用navigator.mediaDevices.getDisplayMedia()抛出NotReadableError,但相同代码在Windows系统可正常运行并生成可播放视频片段。
核心代码片段:
const stream = await navigator.mediaDevices.getDisplayMedia({ video: { displaySurface: "monitor", width: 1368, height: 768, }, // audio: { deviceId: "default" }, }); const mediaRecorder = new MediaRecorder(stream); mediaRecorder.ondataavailable = (event) => { // ... 处理视频片段逻辑 ... };
Puppeteer非无头模式启动参数:
--use-fake-ui-for-media-stream, --auto-select-desktop-capture-source=Entire screen, --enable-features=AudioServiceOutOfProcess, --no-sandbox, --disable-setuid-sandbox, --disable-features=IsolateOrigins,site-per-process
已尝试方案:
- 启用
--use-fake-ui-for-media-stream参数 - 指定
--auto-select-desktop-capture-source=Entire screen参数 - 开启
AudioServiceOutOfProcess特性 - 禁用沙箱相关参数
解决方法
1. 匹配正确的显示源名称
Ubuntu下--auto-select-desktop-capture-source的参数值必须与系统实际显示源名称完全一致:
- 打开Chrome输入
chrome://webrtc-internals/,手动发起一次屏幕捕获,查看DesktopCaptureSources中的名称,将启动参数里的Entire screen替换为实际名称(比如部分环境下是Screen 0) - 确认当前用户拥有桌面捕获权限,手动启动Chrome尝试屏幕共享,验证权限是否正常
2. 补充Puppeteer启动参数
添加以下参数解除Linux下Chrome的媒体捕获限制:
--allow-file-access-from-files, --disable-web-security, --enable-usermedia-screen-capturing, --disable-features=MediaSessionService
3. 安装系统依赖组件
Ubuntu下Chrome屏幕捕获依赖特定库,执行以下命令安装:
sudo apt install libxss1 libappindicator1 libindicator7
若使用Wayland桌面环境,切换到Xorg再测试:登录时点击用户名旁的齿轮图标,选择Ubuntu on Xorg,重启系统后重新运行代码。
4. 调整getDisplayMedia配置
简化视频分辨率配置,避免固定值导致的兼容性问题:
const stream = await navigator.mediaDevices.getDisplayMedia({ video: { displaySurface: "monitor", width: { ideal: 1368 }, height: { ideal: 768 }, }, });
使用ideal参数让系统自动适配最优分辨率,而非强制固定值。
5. 脱离Puppeteer验证基础功能
直接在Chrome控制台执行核心捕获代码,若仍报错,说明问题出在系统或Chrome配置,而非Puppeteer本身,可优先排查系统权限、Chrome版本等问题。
内容的提问来源于stack exchange,提问作者Shubham More
相关产品推荐
相关产品推荐

