type picture ejemplos createobjecturl accept docker webrtc ubuntu-14.04 dockerfile chromium

picture - Cómo compartir & WebRTC stream desde un dispositivo/dev/videoX desde un Chromium en el host y Chromium en un contenedor docker



upload camera capture html (1)

Si solo quieres sesiones separadas de Chrome, puedes comenzar con:

chromium-browser --user-data-dir=/tmp/chrome1

y otra instancia con

chromium-browser --user-data-dir=/tmp/chrome2

Docker es solo una forma de documentar y repetir la configuración de un entorno muy específico. La capa adicional de seguridad que agrega es mínima, especialmente con los permisos adicionales que está transmitiendo y especialmente en comparación con la seguridad realmente bien probada de Chrome.

Si necesita un poco más de aislamiento, puede crear usuarios separados:

# run these lines individualy, just press Enter for everything, don''t set passwords for them, they won''t be able to log in. sudo adduser chrome1 sudo adduser chrome2 # if you want to give each access to only one of the cams you can try this sudo chown chrome1:chrome1 /dev/video0 sudo chown chrome2:chrome2 /dev/video1 # keeping in mind unplugging and replugging the camera might reset the permissions unless you update the relevant /etc files # to allow anyone to use your X xhost + # run the two separate browsers sudo su - chrome1 -c chromium-browser & sudo su - chrome2 -c chromium-browser &

Ambiente

  • Host ejecutando Ubuntu 14.04.5 LTS
  • Versión Docker 17.09.0-ce, compilación afdb6d4
  • Cromo 62.0.3202.89
  • 2 webcams: /dev/video0 , /dev/video1

Camaras

# v4l2-ctl --list-devices Venus USB2.0 Camera (usb-0000:00:1a.0-1.2.2): /dev/video1 USB 2.0 Camera (usb-0000:00:1a.0-1.3): /dev/video0

Necesito compartir las cámaras web en el host Ubuntu 14.04 con el contenedor de la Ubuntu 16.04 acoplable Ubuntu 16.04 y poder obtener las transmisiones de video (WebRTC getUserMedia ) de cada cámara en cada instancia de cromo que se ejecute respectivamente en el host y el contenedor o en 2 contenedores separados de la docker.

Para probar el getUserMedia , estoy navegando a

Como reproducirse

Dockerfile

FROM ubuntu:16.04 # Install chromium RUN apt-get update / && apt-get install sudo chromium-browser alsa-base alsa-utils alsa-oss -y / && rm -rf /var/lib/apt/lists/* # Create a normal user to run chromium as RUN useradd --create-home browser / && adduser browser video / && adduser browser audio / && usermod -aG sudo browser USER browser WORKDIR /home/browser ENTRYPOINT ["/usr/bin/chromium-browser", "--use-fake-ui-for-media-stream", "--disable-infobars", "--allow-running-insecure-content", "--ignore-certificate-errors"] CMD ["https://www.stackoverflow.com/"]

docker-componer hasta

$ more docker-compose.yml version: ''3'' services: chromium_video1: build: context: . dockerfile: Dockerfile image: ubuntu-cr:0.1 # privileged: true # then you don''t need the devices section # Pass the URL as an argument (CMD) to ENTRYPOINT in the Dockerfile #command: ["https://www.onlinemictest.com/webcam-test/"] # WORKS command: ["https://webrtc.github.io/samples/src/content/getusermedia/gum/"] # FAILS environment: #DISPLAY: $DISPLAY DISPLAY: XAUTHORITY: /.Xauthority devices: - /dev/video1 - /dev/dri # - /dev/snd volumes: - /tmp/.X11-unix:/tmp/.X11-unix - ~/.Xauthority:/.Xauthority:ro - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket cap_add: - SYS_ADMIN chromium_video0: build: context: . dockerfile: Dockerfile image: ubuntu-cr:0.1 # privileged: true # Pass the URL as an argument (CMD) to ENTRYPOINT in the Dockerfile #command: ["https://www.onlinemictest.com/webcam-test/"] command: ["https://webrtc.github.io/samples/src/content/getusermedia/gum/"] environment: DISPLAY: XAUTHORITY: /.Xauthority devices: - /dev/video0 - /dev/dri # - /dev/snd volumes: - /tmp/.X11-unix:/tmp/.X11-unix - ~/.Xauthority:/.Xauthority:ro - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket cap_add: - SYS_ADMIN

Intentos adicionales con

command: ["https://appear.in/hello"]

y

command: ["https://test.webrtc.org/"]

lleva a lo mismo, una vez que una cámara comienza a transmitir la otra no puede

Arranque el cromo en contenedores docker.

export DISPLAY=:0.0 docker-compose up

RESULTADOS

Usando https://webrtc.github.io/samples/src/content/getusermedia/gum/ => FAILS

Si cierro chromium_video1 , chromium_video0 transmite el video después de una actualización del navegador (?).

getUserMedia desde la consola web:

navigator.mediaDevices.getUserMedia({audio: true, video: true})

pero después de cerrar la transmisión de cromo /dev/video1 , ahora /dev/video0 es legible. El comando getUserMedia resuelve y la cámara transmite video desde /dev/video0

No están accediendo al mismo dispositivo. Me registré en chrome://media-internals

Usando https://www.onlinemictest.com/webcam-test/ WORKS !!!!!?!?!?!

Cuando se usa https://www.onlinemictest.com/webcam-test/ lugar, funciona, podemos ver transmisiones para ambas cámaras. Creo que ese sitio en particular sigue usando URL.createObjectURL .

imagenes

docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu-cr 0.1 a61f5506b1f9 9 minutes ago 764MB ubuntu 16.04 747cb2d60bbe 2 months ago 122MB

Abra un navegador Chromium en la misma URL en el host

:( me sale el mensaje de ERROR

NotReadableError

¿Algún puntero sobre cómo configurar mi contenedor de ventana acoplable para permitir que una cámara se asigne al host mientras que la otra está dedicada al contenedor de ventana acoplable?

Hilos interesantes

  • NotReadableError: Error al asignar los puntos de la fuente de videos que esto puede estar sucediendo porque la cámara está siendo utilizada por otra aplicación.

  • Curiosamente, cuando abro 2 instancias de Chromium en el host (sin contenedor esta vez) que apunta a la misma página de prueba de la cámara ( getUserMedia ), logra obtener la misma transmisión de video a las 2 instancias de Chromium. Ahí es cuando trato de acceder desde un contenedor que entra en conflicto. Puede jugar uno u otro, pero no al mismo tiempo. Así que podría ser algo para configurar en el contenedor docker. Aún así, tring para entender por qué esto está sucediendo.

ACTUALIZAR

registros de la ventana acoplable

chromium_video1 | libGL error: failed to open drm device: No such file or directory chromium_video1 | libGL error: failed to load driver: i965 chromium_video0 | libGL error: failed to open drm device: No such file or directory chromium_video0 | libGL error: failed to load driver: i965

Resuelto este leyendo este thread

Intenté compartir devices como se sugiere en los comentarios a continuación, sin éxito

- /dev/video1:/dev/video1:rm - /dev/video1:/dev/video1:r - /dev/video1:/dev/video1:rw

Preguntas

  • ¿Qué sucede cuando se accede a una cámara y comienza la transmisión? ¿hay un archivo de bloqueo creado y dónde? Tenga en cuenta sin embargo que no estoy accediendo a la misma cámara.

En las secciones de volúmenes que estoy compartiendo.

- /tmp/.X11-unix:/tmp/.X11-unix - ~/.Xauthority:/.Xauthority:ro - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket

No creo que estos archivos sean el problema, pero siguen investigando.