/dev/video0
, /dev/video1
# 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
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"]
$ 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
export DISPLAY=:0.0
docker-compose up
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
Ótimo! Eu posso ver o fluxo de vídeo da minha câmera!
:( 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?
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.