환경

환경

환경

  • Ubuntu 14.04.5 LTS를 실행하는 호스트
  • Docker 버전 17.09.0-ce, afdb6d4 빌드
  • 크롬 62.0.3202.89
  • 웹캠 2개: /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

웹캠을 공유해야 해요Ubuntu 14.04 주인도착하다Ubuntu 16.04 도커 컨테이너getUserMedia그리고 호스트와 컨테이너에서 각각 실행되는 각 크롬 인스턴스의 각 카메라에서 비디오 스트림(WebRTC)을 얻을 수 있습니다 .

테스트하기 위해 getUserMedia탐색 중입니다.https://www.onlinemictest.com/webcam-test/

재생산 방법

도커파일

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

1. 도커 컨테이너에서 Chromium을 시작합니다.

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

2. Docker 컨테이너에서 Chromium이 열리면 다음으로 이동합니다.https://www.onlinemictest.com/webcam-test/

엄청난! 내 카메라에서 비디오 스트림을 볼 수 있습니다!

3. Chromium 브라우저를 열고 동일한 URL을 방문하십시오.주인

:( 오류 메시지가 나타납니다.

카메라가 인증되지 않았습니다. 미디어 권한 설정을 확인하세요.

호스트 컴퓨터에서 Chromium을 처음 실행하고 카메라 테스트 페이지로 이동하여 비디오 스트림( getUserMedia)을 가져오면 동일한 오류가 발생합니다. 컨테이너에서 Chromium을 순차적으로 실행하면 NavigatorUserMediaError> 에 해당하는 동일한 오류 메시지가 나타납니다 TrackStartError.

Chromium 콘솔에서 시도했습니다.

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

TrackStartError다른 Chromium 인스턴스에서 이미 실행 중인 캠 테스트를 제공합니다 .

하나의 카메라를 호스트에 할당하고 다른 카메라를 Docker 컨테이너 전용으로 할당할 수 있도록 내 Docker 컨테이너를 구성하는 방법에 대한 조언이 있습니까?

흥미로운 주제

  • NotReadableError: 비디오 소스를 할당할 수 없습니다.다른 응용 프로그램에서 카메라를 사용하고 있기 때문에 이런 일이 발생할 수 있습니다.

  • 흥미롭게도 호스트 시스템(이번에는 컨테이너 없음)에서 Chromium 인스턴스 2개를 열고 동일한 카메라 테스트 페이지( getUserMedia)를 가리키면 Chromium 인스턴스 2개에 동일한 비디오 스트림을 가져옵니다. 이때 충돌이 발생한 컨테이너에서 액세스를 시도합니다. 둘 중 하나만 재생할 수 있지만 둘 다 재생할 수는 없습니다. 따라서 아마도 도커 컨테이너에 구성된 것일 수 있습니다. 아직도 왜 이런 일이 발생하는지 이해하려고 노력하고 있습니다.

관련 정보