Я пытаюсь создать простой сервер, который в основном:
- открывает веб-страницу с экземпляром 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.
Цените помощь!