Como compartilhar dispositivos / dev / videoX entre o Chromium no host e o Chromium em um contêiner docker

1

Ambiente

  • Host executando o Ubuntu 14.04.5 LTS
  • Versão do Docker 17.09.0-ce, construção afdb6d4
  • Chromium 62.0.3202.89
  • 2 webcams: /dev/video0 , /dev/video1

Câmeras

# 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

Eu preciso compartilhar as webcams no Ubuntu 14.04 host com o Ubuntu 16.04 contêiner docker e conseguir os fluxos de vídeo (WebRTC getUserMedia ) de cada câmera em cada instância de cromo, respectivamente, sendo executada no host e no contêiner.

Para testar o getUserMedia , estou navegando no link

Como reproduzir

Dockerfile

Dockerfile 
FROM ubuntu:16.04

# Install chromium
RUN apt-get update \
    && apt-get install sudo chromium-browser alsa-base -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

CMD ["/usr/bin/chromium-browser"]

docker-compose up

$ more docker-compose.yml 
version: '3'
services:
  chromium:
    build:
      context: .
      dockerfile: Dockerfile
    image: ubuntu-cr:0.1

    privileged: true

    environment:
        DISPLAY: $DISPLAY
        XAUTHORITY: /.Xauthority

    volumes:
        - /tmp/.X11-unix:/tmp/.X11-unix
        - ~/.Xauthority:/.Xauthority:ro

1. Iniciar o Chromium no contêiner docker

export DISPLAY=:0.0 
docker-compose up

imagens

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
hello-world     latest         05a3bd381fc2        3 months ago        1.84kB

2. Quando o Chromium abrir no contêiner do Docker, vá até o link

Ótimo! Eu posso ver o fluxo de vídeo da minha câmera!

3. Abra um navegador do Chromium para o mesmo URL no host

:( recebo a mensagem ERROR

Camera not authorized. Please check your media permissions settings

Recebo o mesmo erro, se iniciar o Chromium on host primeiro e navegar até a página de teste da câmera para obter o fluxo de vídeo ( getUserMedia ). Quando na sequência eu executo o Chromium no container, recebo a mesma mensagem de ERRO, que corresponde ao NavigatorUserMediaError > TrackStartError .

Eu tentei no console do Chromium

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

e ele me deu um TrackStartError quando o teste da câmera já estava sendo executado na outra instância do Chromium.

Quaisquer ponteiros sobre como configurar meu contêiner docker para permitir que uma câmera seja atribuída ao host, enquanto a outra é dedicada ao contêiner docker?

Tópicos interessantes

  • NotReadableError: falha ao alocar a fonte de vídeos pontos que isso pode estar acontecendo porque a câmera é usada por outro aplicativo.

  • Curiosamente, quando abro 2 instâncias do Chromium no host (sem contêiner desta vez) apontando para a mesma página de teste da câmera ( getUserMedia ), ele consegue obter o mesmo fluxo de vídeo para as duas instâncias do Chromium . É quando tento acessar de um contêiner que está em conflito. Pode jogar um ou outro, mas não ao mesmo tempo. Portanto, pode ser algo para configurar no contêiner docker. Ainda tente entender por que isso está acontecendo.

por zabumba 19.12.2017 / 23:09

0 respostas