환경
- 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개에 동일한 비디오 스트림을 가져옵니다. 이때 충돌이 발생한 컨테이너에서 액세스를 시도합니다. 둘 중 하나만 재생할 수 있지만 둘 다 재생할 수는 없습니다. 따라서 아마도 도커 컨테이너에 구성된 것일 수 있습니다. 아직도 왜 이런 일이 발생하는지 이해하려고 노력하고 있습니다.