如何从 Docker 容器中的 puppeteer 实例录制视频和音频

Ola*_*him 6 pulseaudio node.js xvfb docker puppeteer

我正在尝试构建一个简单的服务器,基本上:

\n
    \n
  • 打开带有 puppeteer 实例的网页。
  • \n
  • 录制网页并保存视频文件。
  • \n
\n

我能够用puppeteer-stream来实现这个来实现这一点,并且它在本地运行得很好。

\n

在尝试将其放入部署到 AWS Elasticbeanstalk 的 docker 实例中时,我遇到了一个问题,无法从 docker 容器启动 chrome 浏览器,但在 xvfb 的帮助下修复了这个问题 - 现在它启动了一个假 UI用于 chrome 选项卡并记录其中的内容。

\n

此时,我可以完美录制视频,但没有音频。我尝试将 PulseAudio 设置为虚拟音频驱动程序,但它也不起作用。

\n

PulseAudio 的另一个问题是,它将记录整个过程而不是 chrome 选项卡,因此如果我们决定同时记录多个网页,将会变得混乱。

\n

这是我的 Dockerfile 目前的样子:

\n
FROM node:12\n\n# Install dependencies\nRUN apt-get update &&\\\n  apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \\\n  libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \\\n  libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \\\n  libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \\\n  ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget \\\n  xvfb pulseaudio x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps\n\n# Cd into /app\nWORKDIR /app\n\n# Copy package.json into the app folder\nCOPY package.json /app\n\n# Install dependencies\nRUN npm config set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD false\nRUN npm config set ignore-scripts false\n\nRUN npm install\n\nCOPY . /app\n\n# Start server on port 80\nEXPOSE 80\n\n# Creating Display\nENV DISPLAY :99\n\n# Start script on Xvfb\nCMD Xvfb :99 -screen 0 1920x1080x24 & pulseaudio --daemonize & yarn start\n\n
Run Code Online (Sandbox Code Playgroud)\n

我还尝试了一种解决方案,您必须创建一个新的用户组并为他们提供音频和视频访问权限,但它也不起作用:

\n
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \\\n    && mkdir -p /home/pptruser/Downloads \\\n    && chown -R pptruser:pptruser /home/pptruser \\\n    && chown -R pptruser:pptruser ./node_modules\n
Run Code Online (Sandbox Code Playgroud)\n

我还检查了这个Node puppeteer 流没有录制音频,但 \xe2\x80\x99s 不是我的情况。

\n

有什么方法可以构建一个可以在 Docker 容器中的多个网页上录制音频和视频的服务器吗?

\n

提醒 - 它可以在本地运行,无需 docker(本地)。它在 docker 内部不起作用,我们需要使用 Docker 才能在 aws 上工作。

\n

感谢您的帮助!

\n