バックグラウンド
video4linux 2 仕様を使用してビデオをキャプチャしています。C プログラムを使用してリアルタイムでキャプチャされます。また、ローカルとリモートの両方で実行できる Java フロントエンドもあります。リモート側は簡単でした。画像を JPEG に圧縮し、mini-http サーバーを介してクライアントに送信し、解凍して画面に表示するだけです。
ローカルで実行する場合、何らかの方法で IPC がそのメモリに直接接続し、Java から画像にアクセスできるようにしたいと考えています。次に、できるだけ少ない CPU パワーを使用してそれらを画面にブリットします。これは「監視」タイプのシステムなので、一度に 8 ~ 16 台のカメラ フィードを実行できます。
質問
画像データ (YUV420P) を v4l2 mmap バッファーから Java アプリに移動して画面に表示する最も効率的な方法は何ですか? コードを表示するか、利用可能な API/仕様があれば教えてください。
答え
時間の都合上、単純なソケットを使用してデータを RGB で送信することにしました。Java クライアントが同じマシンで実行されている場合、パフォーマンスを大幅に向上させることができました。クライアントがリモートで実行されている場合でも、ネットワーク経由で JPEG を送信しています。次に、最適化された JPEG デコーダーを見つける必要があります。
ところで、これは 2 つのクライアントではなく、CameraStream ウィジェットが両方のタイプを読み取って解析するだけです。