コンピューターに 2 つの Web カメラを接続すると、/dev フォルダーに一覧表示されました: /dev/video0; /dev/video1.
入力でウェブカメラのシリアル番号を取得する C コードを書くのを手伝ってくれませんか: /dev/video[0;1]
コンピューターに 2 つの Web カメラを接続すると、/dev フォルダーに一覧表示されました: /dev/video0; /dev/video1.
入力でウェブカメラのシリアル番号を取得する C コードを書くのを手伝ってくれませんか: /dev/video[0;1]
libusbをいじってみると、標準的なgetSerialNumber()
方法があるようです。残念ながら、すべての USB デバイスがこれを実装しているわけではありません。None を返す 4 ドルの安価なウェブカメラをいくつか持っています。これらのインターフェイスは、VendorID や ProductID などの他のメタデータを公開します。一部のコードでは、これらを一意の識別子として使用しようと試みていますが、特に同じメーカーとモデルのデバイスが複数ある場合は、一意であるとは限りません。
しかし、デバイスのシリアル番号を取得したと仮定すると、次の問題は、対応する /dev/videoN ファイルを特定することです。古いバージョンの libusb がインストールされているため、USB デバイスの完全な sysfs パスを返すメソッドが機能しませんでした。そのため、代わりに からの出力を破棄しましたhwinfo
。カメラに対応するすべてのチャンクを抽出し、それらから次のようなピースを抽出しました。
SysFS BusID: 1-1.2:1.0
USB デバイスは実際には複雑なツリーを形成し、BusIDはデバイスがそのツリー内のどこにあるかをエンコードします。
次に、その BusID を使用して、デバイスがファイル システム内のどこに存在するか、およびビデオ パスを次の場所にある必要があります。
/sys/bus/usb/devices/<BusID>/video4linux/
これはディレクトリで、その中には /dev にあるものと一致する videoN ファイルがあります。
libusbを使用しlsusb
ていることがわかります。特にusb デバイスの処理と列挙のための多くの機能があります。libudevも関連している可能性があります。
または、popen
コマンドlsusb
...