Armadilloフォーラム

接続先のUSBポート毎にカメラの台数認識に違いがある

title24

2025年7月30日 10時51分

==========
製品型番:Armadillo X-2
ABOSバージョン:3.21.3-at.3
カーネルバージョン:5.10.235-0-at on an aarch64
その他:
==========

お世話になっております。

USBインターフェース(CON4:USB3.0 CON17:USB2.0)に、複数台のUSBカメラを接続することを考えております。
USBHUBを使い、HUB1台に対しカメラ4台を接続しているとします。
CON17に接続したところ4台すべて認識しますが、そのHUBとカメラの一式をCON4に差し替えた場合、一台しか認識しません。
HUBは、市販のセルフパワー型とバスパワー型の双方を試しましたが、結果は変わりません。

そのほか、以下のような試験もしています。
セットA) HUB:カメラ = 1:3 (台)
セットB) HUB:カメラ = 1:2 (台)

試験1) セットAをCON4に接続、セットBをCON17に接続 → カメラ3台を認識 (1+2=3)
試験2) セットBをCON4に接続、セットAをCON17に接続 → カメラ4台を認識 (1+3=4)
※現状CON4経由では、HUBの有無に関係なく、1台しかUSBカメラを認識しない状況です。
※現在手元には4ポートのUSBHUBがあり、それを使用しています。

.confファイルには以下の記述をしております。
---
add_hotplugs ttyUSB
add_hotplugs video4linux
add_volumes /dev/bus/usb:/dev/bus/usb
---

USB接続制御機能は無効です(未使用)。

動画処理はGstreamerを使用しています。
---
[Dockerfile]
apt install -y \
gstreamer1.0-tools \
gstreamer1.0-plugins-bad \
gstreamer1.0-plugins-good \
gstreamer1.0-imx \

[実行コマンド]
gst-launch-1.0 -e \
videomixer[又は compositor] name=mix \
tee name=t \
t. ! queue ! videoconvert ! autovideosink sync=false \
t. ! queue ! videoconvert ! vpuenc_h264 ! h264parse ! \
qtmux ! filesink location={LOCATION} \
{カメラごとのSINK設定}
---

所望では、USBカメラが5~8台規模で起動可能か、またその時どのような挙動をとるかを検証したいです。
何か対応策はありますでしょうか?

コメント

以下投稿の追記となります。
Gstreamerの実行コマンド上で、

>videomixer[又は compositor] name=mix \
>tee name=t \

この2行の間には、sinkの設定(画面分割のコマ割り)が入ります。

at_dominique.m…

2025年8月4日 16時55分

title24さん

返事が遅くなってすみません、
マルティネです。

手元でハブに 4 台で試して、CON4 か CON17 でもちゃんと認識されました。

2点確認させてください:
* 確認方法としては gstreamer で利用できるかどうかに見えますが、 ls -l /dev/v4l/by-path/ でも確認していただけますか?
* 認識されなかった際の dmesg 出力も提供していただければ幸いです。

よろしくお願いします

マルティネ様

検証していただきありがとうございます。
カメラ4台をCON4およびCON17に接続した際の
ls -l /dev/v4l/by-path出力と、dmesg出力を共有します。
よろしくお願いいたします。

> title24さん
>
> 返事が遅くなってすみません、
> マルティネです。
>
> 手元でハブに 4 台で試して、CON4 か CON17 でもちゃんと認識されました。
>
> 2点確認させてください:
> * 確認方法としては gstreamer で利用できるかどうかに見えますが、 ls -l /dev/v4l/by-path/ でも確認していただけますか?
> * 認識されなかった際の dmesg 出力も提供していただければ幸いです。
>
> よろしくお願いします

ファイル ファイルの説明
CON4.txt [問題あり]カメラ4台をCON4に接続し、Gstreamerサンプルファイル実行時の出力
CON17.txt [問題なし]カメラ4台をCON17に接続し、Gstreamerサンプルファイル実行時の出力

at_dominique.m…

2025年8月5日 14時56分

マルティネです。

ログありがとうございます

> カメラ4台をCON4およびCON17に接続した際の
> ls -l /dev/v4l/by-path出力と、dmesg出力を共有します。

dmesg と video* のデバイスだけで見るとちゃんと認識されてますが、displaytest.py というスクリプトで認識されてないということですね。
(「[start_recording]cameras:[...]」のメッセージにリストされてない)

start_recording のメッセージは gstreamer からではなく displaytest.py からの出力と思いますが、合ってますか?
カメラをどういうふうに判別していますか?

よろしくお願いします

at_dominique.m…

2025年8月5日 16時46分

連続ですみません、
マルティネです。

> start_recording のメッセージは gstreamer からではなく displaytest.py からの出力と思いますが、合ってますか?
> カメラをどういうふうに判別していますか?

上記の他、シンプルな gstreamer コマンドでも生成を確認していただけますでしょうか。
例えば「gst-launch-1.0 -e v4l2src device=/dev/video2 ! autovideosink」等で、デバイス一つずつ確認してみてください。
CON4 の場合は start_recording の出力にリストされてませんが、CON17と同じく -index0 のデバイスは /dev/video2, video6, video10 と video14 なのでそれぞれを確認していただければ幸いです。

画像の再生ができれば、USB としては問題ないですので、displaytest.py でなぜ認識されてないか問題に集中できます。

よろしくお願いします

マルティネ様

ご回答ありがとうございます。
マルティネ様のコメントを読み、思い至ることがありコードを見直したところ、
以下の経緯をへて問題が解決できましたことを報告いたします。

以下、USBHUBを2台用意し、それぞれのポート1、ポート2にカメラを2台接続(計4台)の上、
CON4とCON17に接続したとします。
以下、その場合のコンソール出力です。

---
# apt install v4l-utils
# v4l2-ctl --list-devices
HD USB Camera: USB Camera (usb-xhci-hcd.1.auto-1.1):
/dev/video14
/dev/video15
/dev/video16
/dev/video17
/dev/media3

HD USB Camera: USB Camera (usb-xhci-hcd.1.auto-1.2):
/dev/video10
/dev/video11
/dev/video12
/dev/video13
/dev/media2

HD USB Camera: USB Camera (usb-xhci-hcd.2.auto-1.1.1):
/dev/video2
/dev/video3
/dev/video4
/dev/video5
/dev/media0

HD USB Camera: USB Camera (usb-xhci-hcd.2.auto-1.1.2):
/dev/video6
/dev/video7
/dev/video8
/dev/video9
/dev/media1
---

手元のGstreamerに係るコードでは、usb-xhci-hcd以下の文字列をもとに、
正規表現などを使い、利用できるカメラデバイス名の一覧を生成しておりました。
ここで、CON4とCON17からのコンソール出力を改めて見ると、CON4側の末尾が[auto-X-Y]、
CON17側末尾が[auto-X-Y-Z]とあり、
出力される項目数が違っております。
これに起因し、CON4側でのカメラデバイスリストの生成過程が意図しないものとなり
「カメラが認識されない」という現象になっていたことがわかりました。

アドバイスをいただけたこと感謝しております。ありがとうございました。

最後にこれに関連して一点質問させていただきます。
上記usb-xhci-hcd以下の情報はUSBインターフェースの物理的な構成によるものであり、
ソフトウェア側の構成や設定により(意図のあるなしにかかわらず)書き換わるものではない、という認識で問題ないでしょうか?

以上よろしくお願いいたします。

> マルティネです。
>
> ログありがとうございます
>
> > カメラ4台をCON4およびCON17に接続した際の
> > ls -l /dev/v4l/by-path出力と、dmesg出力を共有します。
>
> dmesg と video* のデバイスだけで見るとちゃんと認識されてますが、displaytest.py というスクリプトで認識されてないということですね。
> (「[start_recording]cameras:[...]」のメッセージにリストされてない)
>
> start_recording のメッセージは gstreamer からではなく displaytest.py からの出力と思いますが、合ってますか?
> カメラをどういうふうに判別していますか?
>
> よろしくお願いします

以下、上記投稿の追記・補足となります。

>上記usb-xhci-hcd以下の情報はUSBインターフェースの物理的な構成によるものであり、
>ソフトウェア側の構成や設定により(意図のあるなしにかかわらず)書き換わるものではない、という認識で問題ないでしょうか?

この質問の意図は、HUBに接続されたカメラの、HUB上の接続場所とデバイス情報の対を一意に(不変で)取得することで、複数台のカメラ画像を一画面上に分割表示するにあたり、カメラ画像の表示場所が入れ替わるなどの問題が起こらないようにしたい、ということにあります。

> マルティネ様
>
> ご回答ありがとうございます。
> マルティネ様のコメントを読み、思い至ることがありコードを見直したところ、
> 以下の経緯をへて問題が解決できましたことを報告いたします。
>
> 以下、USBHUBを2台用意し、それぞれのポート1、ポート2にカメラを2台接続(計4台)の上、
> CON4とCON17に接続したとします。
> 以下、その場合のコンソール出力です。
>
> ---
> # apt install v4l-utils
> # v4l2-ctl --list-devices
> HD USB Camera: USB Camera (usb-xhci-hcd.1.auto-1.1):
> /dev/video14
> /dev/video15
> /dev/video16
> /dev/video17
> /dev/media3
>
> HD USB Camera: USB Camera (usb-xhci-hcd.1.auto-1.2):
> /dev/video10
> /dev/video11
> /dev/video12
> /dev/video13
> /dev/media2
>
> HD USB Camera: USB Camera (usb-xhci-hcd.2.auto-1.1.1):
> /dev/video2
> /dev/video3
> /dev/video4
> /dev/video5
> /dev/media0
>
> HD USB Camera: USB Camera (usb-xhci-hcd.2.auto-1.1.2):
> /dev/video6
> /dev/video7
> /dev/video8
> /dev/video9
> /dev/media1
> ---
>
> 手元のGstreamerに係るコードでは、usb-xhci-hcd以下の文字列をもとに、
> 正規表現などを使い、利用できるカメラデバイス名の一覧を生成しておりました。
> ここで、CON4とCON17からのコンソール出力を改めて見ると、CON4側の末尾が[auto-X-Y]、
> CON17側末尾が[auto-X-Y-Z]とあり、
> 出力される項目数が違っております。
> これに起因し、CON4側でのカメラデバイスリストの生成過程が意図しないものとなり
> 「カメラが認識されない」という現象になっていたことがわかりました。
>
> アドバイスをいただけたこと感謝しております。ありがとうございました。
>
> 最後にこれに関連して一点質問させていただきます。
> 上記usb-xhci-hcd以下の情報はUSBインターフェースの物理的な構成によるものであり、
> ソフトウェア側の構成や設定により(意図のあるなしにかかわらず)書き換わるものではない、という認識で問題ないでしょうか?
>
> 以上よろしくお願いいたします。
>
>
>
>
>
>
>
> > マルティネです。
> >
> > ログありがとうございます
> >
> > > カメラ4台をCON4およびCON17に接続した際の
> > > ls -l /dev/v4l/by-path出力と、dmesg出力を共有します。
> >
> > dmesg と video* のデバイスだけで見るとちゃんと認識されてますが、displaytest.py というスクリプトで認識されてないということですね。
> > (「[start_recording]cameras:[...]」のメッセージにリストされてない)
> >
> > start_recording のメッセージは gstreamer からではなく displaytest.py からの出力と思いますが、合ってますか?
> > カメラをどういうふうに判別していますか?
> >
> > よろしくお願いします

at_dominique.m…

2025年8月5日 17時09分

マルティネです。

> マルティネ様のコメントを読み、思い至ることがありコードを見直したところ、
> 以下の経緯をへて問題が解決できましたことを報告いたします。

解決できてなによりです。

> 上記usb-xhci-hcd以下の情報はUSBインターフェースの物理的な構成によるものであり、
> ソフトウェア側の構成や設定により(意図のあるなしにかかわらず)書き換わるものではない、という認識で問題ないでしょうか?

物理的な違いです。
CON17 の方は USB2422 (USBハブ)経由で接続していますので、usb の「パス」が一桁長くなります。
usbutils パッケージの lsusb --tree の出力に比較すれば分かりやすいと思いますが、usb-xhci-hcd.1.auto と usb-xhci-hcd.2.auto はバスの名前で、それ以降の 1.2 か 1.1.2 は各ポート番号を表示しています。
ソフトで変更できません。

よろしくお願いします

at_dominique.m…

2025年8月5日 17時18分

> この質問の意図は、HUBに接続されたカメラの、HUB上の接続場所とデバイス情報の対を一意に(不変で)取得することで、複数台のカメラ画像を一画面上に分割表示するにあたり、カメラ画像の表示場所が入れ替わるなどの問題が起こらないようにしたい、ということにあります。

追記を確認する前に返事して、こちらも十分回答になってりと思いますが、念の為:
物理的なパスということですので、再起動やソフトウェアのアップデート等で順番が入れ替わることはありません。

/dev/video4 ではなく /dev/v4l/by-path/platform-xhci-hcd.1.auto-usb-0:1.3:1.0-video-index0 のようなパスを直接に (v4l2src のソースとして)利用すると管理しやすいと思います。

よろしくお願いします。