環境

環境

環境

  • 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インスタンスに同じビデオストリームを取得します。このとき、競合が発生したコンテナからアクセスを試みます。どちらも再生できますが、どちらも再生できません。したがって、おそらくドッカーコンテナに設定されている可能性があります。それでもなぜこれが起こるのか理解しようとしています。

関連情報