環境
- Ubuntu 14.04.5 LTSを実行しているホスト
- Docker バージョン 17.09.0-ce, afdb6d4 ビルド
- Chrome 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
Webカメラを共有する必要があります。Ubuntu 14.04
所有者到着Ubuntu 16.04
ドッカーコンテナgetUserMedia
ホストとコンテナでそれぞれ実行されている各Chromeインスタンスの各カメラからビデオストリーム(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:ビデオソースを割り当てることができません。他のアプリケーションでカメラを使用しているため、これが発生する可能性があります。
興味深いことに、ホストシステム(今回はコンテナなし)で2つのChromiumインスタンスを開き、同じカメラテストページ(
getUserMedia
)をポイントすると、2つのChromiumインスタンスに同じビデオストリームを取得します。このとき、競合が発生したコンテナからアクセスを試みます。どちらも再生できますが、どちらも再生できません。したがって、おそらくドッカーコンテナに設定されている可能性があります。それでもなぜこれが起こるのか理解しようとしています。