JMF(Java Media Framework)を使用して、ビデオキャプチャデバイスから生のビデオフレームを読み取ろうとしています。
「キャプチャ」部分を正常に作成しました。Managerによって作成されたPlayerオブジェクトを使用して、Webカメラからリアルタイムビデオを表示できます。ただし、実際のフレームにアクセスするためのカスタムコンポーネントを作成する方法がわかりません。これはおそらく、これまでManagerが必要なすべてのクラスインスタンスを作成していたためです。
ビデオを表示するGUIコンポーネントを作成することから始めたいと思います。(私はAWT / Swingに精通していませんが、他のGUIフレームワークの知識に基づいて、たとえば、再描画要求が行われたとき、または新しいフレームが利用可能になったときにビデオを描画するJPanelから派生したものを言います。)すべての新しいフレームを処理し、すべてのピクセルにわたってx/yでループできるようにしたいと思います。デバイスでraw/RGB形式にアクセスできますが、たとえばYUVからの自動変換は問題ありません。
どこから始めたらいいのかわからない。JMFのドキュメントでは、いくつかの異なる場所にあるProcessorまたはDataSinkからクラスを派生させることを推奨しています。プロセッサインターフェイスを使用するのはやり過ぎのようです。たとえば、再生やタイミング制御機能は必要ありません。そもそもそれらを実装する方法がわかりません。DataSinkからの派生は、役に立たない抽象関数が少ない、より単純なオプションのようです。ただし、どちらの場合でも、次の方法については完全に途方に暮れています。
a)コンポーネントをビデオキャプチャデータソースに接続します
b)クラス内から実際のフレームバッファにアクセスします
私はここで間違った方向に進んでいる可能性さえあります。これまでに試したことを文書化したかっただけです。JMFのドキュメントは不足しているようで、ほとんどの場合、メディアプレーヤーとコンバーターの[設計]を対象としています。
注:Processingライブラリには、これに対する簡単な解決策があるようです。私は次の線に沿った例を見てきました:x = new Image(captureDevice.getFrame())
これは、中間タイプではないにしても、Imageを介してピクセルレベルのアクセスが可能であることを示唆しているようです。
しかし、私は最初にJMFでそれがどれほど難しいかを本当に見たいと思います。