
私は、Raspberry Pi を複数のサーボの I/O ボードとして使用するプロジェクトに取り組んでいます。これらのサーボは、実際にはイーサネット経由で RPi に接続された別のコンピューターによって制御されます。
プロジェクトに 2 台の USB ウェブカメラを追加する必要があり、I/O の単一の場所を維持するために、それらを RPi に接続したいと考えています。
私は、Web カメラからの入力をホスト マシンに転送する最もシンプルでレイテンシの低い方法を探しています。Usbip と ffmpeg を使用してデータをストリーミングしようとしましたが、どちらの方法でも問題が発生します。他に何か提案はありますか? それとも、試した方法の 1 つを追求し続けるべきでしょうか。
ありがとう!
答え1
ウェブカメラにはハードウェア圧縮機能がありますか? それとも RPi で圧縮していますか? VideoCore プロセッサはこの種の作業に適していますが、Linux が動作する ARM コプロセッサは低解像度のストリームを圧縮できるほどには至っていないため、OpenMAX を使用して VideoCore にオフロードする必要があります。VideoCore コーデックをロードするプログラムは、omxplayer
いくつかのgstreamer
プラグインです。
VideoCore を使用しても、USB から内部相互接続を介して生のビデオ データを取得するときに帯域幅の問題が発生します。
したがって、実行可能な選択肢は
- 事前に圧縮されたビデオ(Web カメラ自体の内部)を USB からイーサネットにコピーします。
- Raspberry Pi の高帯域幅ビデオ ポートにインターフェイスする RPi カメラ モジュールを VideoCore に直接使用して、処理と圧縮を行います。
後者のオプションは、レイテンシがかなり低くなる可能性がありますが、ストリームは 1 つだけです。 1 つのビデオ ポートを介して 2 つのストリームをインターリーブすることは理論的には可能ですが、VideoCore のコーデックは 2 つのストリームを受け入れて分離するように設計する必要があり、そのための技術データは、Broadcom の最大の顧客に対して NDA の下でのみ提供されます。
ビデオ コーデックの開発プロセスに関する詳しい情報は、Rasberry Pi フォーラムで確認できます。簡単に言うと、Broadcom がほとんどの作業を行っており、Raspberry Pi 財団は技術データにアクセスできますがエンジニアが足りず、NDA により作業を外注することが禁止されています。