Как записать видео со звуком из экземпляра puppeteer из док-контейнера

Я пытаюсь создать простой сервер, который в основном:

  • открывает веб-страницу с экземпляром puppeteer.
  • записывает веб-страницу и сохраняет видеофайл.

Мне удалось реализовать это с помощью puppeteer-stream, и это отлично работает локально.

Пытаясь поместить это в экземпляр докера, развернутый на AWS Elasticbeanstalk, я столкнулся с проблемой, из-за которой я не мог запустить браузер Chrome из контейнера докера, но это было исправлено с помощью xvfb — теперь он запускает поддельный пользовательский интерфейс для хромированные вкладки и записи внутри.

На данный момент я могу отлично записывать видео, но в нем НЕТ звука. Я попытался настроить PulseAudio в качестве виртуального аудиодрайвера, но он тоже не работает.

Еще одна проблема с PulseAudio заключается в том, что он будет записывать весь процесс, а не вкладку Chrome, поэтому если мы решим одновременно записать несколько веб-страниц, это будет хаотично.

Вот как выглядит мой Dockerfile на данный момент:

FROM node:12

# Install dependencies
RUN apt-get update &&\
  apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
  libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
  libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 \
  libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 \
  ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget \
  xvfb pulseaudio x11vnc x11-xkb-utils xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic x11-apps

# Cd into /app
WORKDIR /app

# Copy package.json into the app folder
COPY package.json /app

# Install dependencies
RUN npm config set PUPPETEER_SKIP_CHROMIUM_DOWNLOAD false
RUN npm config set ignore-scripts false

RUN npm install

COPY . /app

# Start server on port 80
EXPOSE 80

# Creating Display
ENV DISPLAY :99

# Start script on Xvfb
CMD Xvfb :99 -screen 0 1920x1080x24 & pulseaudio --daemonize & yarn start

Я также попробовал решение, в котором вам нужно создать новую группу пользователей и предоставить им доступ к аудио и видео, но оно тоже не работает:

RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
    && mkdir -p /home/pptruser/Downloads \
    && chown -R pptruser:pptruser /home/pptruser \
    && chown -R pptruser:pptruser ./node_modules

Я также проверил этот поток Node puppeteer, не записывающий звук, но это не мой случай .

Есть ли способ создать сервер, который может записывать аудио и видео на нескольких веб-страницах в контейнере Docker?

НАПОМИНАНИЕ - работает локально без докера (локально). Он просто не работает внутри Docker, и нам нужно использовать Docker, чтобы он работал на aws.

Цените помощь!


person Olamilekan Ibrahim    schedule 17.04.2021    source источник
comment
Если вы пытаетесь имитировать как видео-, так и аудиоустройства, и вам нужно запустить несколько демонов для запуска процесса, а также инструмент записи, может ли виртуальная машина подойти лучше? Если вы настроили его с помощью инструмента системной автоматизации, такого как Salt Stack, Ansible или Chef, вы можете воспроизвести ту же конфигурацию на своем экземпляре EC2.   -  person David Maze    schedule 17.04.2021