Estoy tratando de construir un servidor simple que básicamente:
Pude implementar esto con puppeteer-stream y funciona perfectamente localmente.
Al intentar poner esto en una instancia de docker implementada en AWS Elasticbeanstalk, me encontré con un problema en el que no podía activar el navegador Chrome desde el contenedor de docker, pero eso se solucionó con la ayuda de xvfb; ahora lanza una interfaz de usuario falsa para las pestañas de cromo y registros que en el interior.
En este punto, puedo grabar video perfectamente pero NO tiene audio. Intenté configurar PulseAudio como un controlador de audio virtual pero tampoco funciona.
Otro problema con PulseAudio es que grabará todo el proceso en lugar de una pestaña de Chrome, por lo que será un caos si decidimos grabar varias páginas web al mismo tiempo.
Así es como se ve mi Dockerfile en este momento:
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
También probé una solución en la que tienes que crear un nuevo grupo de usuarios y darles acceso de audio y video, pero tampoco funciona:
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
También verifiqué que esta transmisión de titiritero de Node no grababa audio , pero ese no es mi caso.
¿Hay alguna manera de lograr construir un servidor que pueda grabar audio Y video en varias páginas web en un contenedor Docker?
RECORDATORIO: funciona localmente sin ventana acoplable (localmente). Simplemente no funciona dentro de Docker y necesitamos usar Docker para que funcione en aws.
¡Agradezco la ayuda!