複雑なカメラのセットアップを標準化するために、Linuxファイルシステム内のカメラ位置の割り当てに特別なルールを課すことができます。
Linuxで 複数のカメラで 行う場合、起動時にカメラが検出された順にロードされることに気づくかもしれません。通常は特に気にする必要はありませんが、固定のライブストリーミングセットアップと複雑なOBSテンプレートを使用している場合、現実世界のどのカメラが仮想世界のどの画面に表示されるかを知っておく必要があります。言い換えれば、あるデバイスを今日は "カメラA "として割り当て、明日は "カメラB "にしたくないということです。
複雑なカメラのセットアップを標準化するために、Linuxファイルシステム内のカメラ位置の割り当てに特別なルールを課すことができます。
udev サブシステム
Linuxでハードウェア周辺機器を処理するシステムはudevと呼ばれ、コンピュータに接続されたすべてのデバイスを検出し、管理します。udevはあまり注目されないので、おそらくあなたはその存在に気づいていないでしょう。しかし、USBフラッシュドライブを接続してデスクトップで開いたり、プリンタを接続したりするときには、udevとやりとりしているはずです。
ハードウェア検出
例えば、コンピュータの左側と右側に2台のUSBカメラがあるとします。左のカメラはクローズアップを、右のカメラは遠景を撮影し、ライブ放送中に2つのカメラを切り替える必要があります。OBS では、各カメラをパネルに追加し、視覚的に "camLEFT "と "camRIGHT "と名前を付けます。
最悪のシナリオを想像してみてください。これは最悪のシナリオです。なぜなら、2つのハードウェア・デバイスが同じである場合、コンピュータがそれらを区別できるような固有のIDを持つことは事実上不可能だからです。
しかし、このジレンマには解決策があり、簡単なターミナルコマンドをいくつか実行するだけで、いくつかの調査を行うことができます。
ベンダー ID と製品 ID を取得します。
まず、ウェブカメラを割り当てたいUSBポートに差し込みます。次に、以下のコマンドを入力します:
$ lsusbBus 006 Device 002: ID Kingston Technology DataTraveler G4Bus 005 Device 003: ID 17 Hewlett-Packard LaserJet P2015 seriesBus 003 Device 006: ID 045e:0779 Microsoft Corp. LifeCam HD-0030Bus 003 Device 002: ID Intel Corp.Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hubBus 001 Device 003: ID 046d:c216 Logitech, Inc. Dual Action GamepadBus 001 Device 002: ID 048d:5702 Integrated Technology Express, Inc.Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ほとんどのカメラは "camera "として報告されるため、通常、camという文字列を指定して検索することで結果を絞り込むことができます。
$ lsusb | grep -i camBus 003 Device 006: ID 045e:0779 Microsoft Corp. LifeCam HD-0030
IDは045e:7709と記載されています。最初の番号はベンダーIDで、2番目の番号はプロダクトIDです。
以下は、OBS の USB 識別子を取得する方法の例です。
Linuxには "Everything is a file "ということわざがあり、実際、USBデバイスは/dev/bus/usb/で始まり、busとdeviceで終わるファイルパスとして記述されています。lsusb出力のバス番号とデバイス番号を見てください。カメラが/dev/bus/usb/にあることがわかります。
Bus 003 Device 002: ID Intel Corp. 使用すると、このUSBデバイスのカーネル・デジグネーターを取得できます:
$ sudo udevadm info --attribute-walk /dev/bus/usb/ | grep "KERNEL="KERNEL=="3-6.2.1"
この例のカーネルUSB識別子は3-6.2.1です。後で使用するので、システム上の識別子をメモしておいてください。
各カメラでこのプロセスを繰り返します。
もう1台のカメラをUSBポートに接続します。これは、もう1台のカメラに使用するUSBポートとは別のものです!
このプロセスを繰り返して、ベンダーID、製品ID、およびカーネルUSB識別子を取得します。
$ lsusb | grep -i camBus 001 Device 004: ID 045e:0779 Microsoft Corp. LifeCam HD-0030$ sudo udevadm info --attribute-walk dev/bus/usb/ | grep "KERNEL="KERNEL=="1-6"
udev ルールの記述
必要なものはすべて揃ったので、あとはudevが特定のUSBポートでカメラを見つけたときに、そのカメラに一貫した識別子を与えるようなルールを書きます。
/etc/udev/rules.d/50-camera.conf 名前のファイルを作成して開き、ベンダーID、製品ID、カーネルIDを使用して、ご自身のシステムに適した2つのルールを入力します:
SUBSYSTEM=="usb", KERNEL=="1-6", ATTR{idVendor}=="045e", ATTR{idProduct}=="0779", SYMLINK+="video100"SUBSYSTEM=="usb", KERNEL=="3-6.2.1", ATTR{idVendor}=="045e", ATTR{idProduct}=="0779", SYMLINK+="video101"
これらのルールは、特定のベンダーと製品IDに一致するデバイスが特定のUSBの場所に見つかった場合、video001とvideo101というシンボリックリンクを作成するようudevに指示します。シンボリックリンクはほとんど任意です。大きな数字を使っているので見つけやすく、既存のデバイスと数字が衝突することはありません。実際に101台以上のカメラがコンピュータに接続されている場合は、念のためvideo002とvideo102を使用してください。
再起動
コンピュータを再起動します。カメラをコンピュータに接続したままにしておいてもかまいません。udevは一度ルールを読み込めば、起動時にデバイスが接続されていても、後で接続されていても、そのルールに従います。
多くの人は、Linuxはリブートを必要としないと言いますが、udevはブート中にルールをロードし、さらに、リブート時にudevルールが動作することを確認したいのです。
コンピュータの再起動後、カメラが登録されている /dev/video ディレクトリを確認します:
$ ls -1 /dev/video*/dev/video0/dev/video1/dev/video001/dev/video101/dev/video2/dev/video3
ご覧のように、video001とvideo101にエントリーがあります。今日、これらは/dev/video2と/dev/video3へのシンボリックリンクですが、明日は/dev/video1と/dev/video2、またはLinuxベースの検出ファイルと割り当てファイルの他の組み合わせになるかもしれません。
これらのシンボリックリンクを OBS で使用することにより、camLEFT は常に camLEFT となり、camRIGHT は常に camRIGHT となります。





