2

シェーダーを使用してカメラ入力を処理するために、iPhone カメラからライブ ビデオ フレームを取得し、それらをテクスチャとしてフラットな OpenGL ジオメトリに適用しています。処理されたテクスチャを取得してムービー ファイルに保存できるかどうかは誰にもわかりませんか?

これには多くの処理能力が必要なようです。また、どのように処理を進めるのが最善なのか、あるいはそれが可能かどうかさえもわかりません。ここでの動機は、カメラから取得したビデオに興味深いシェーダー効果を適用し、結果を保存して他のユーザーと共有できるようにすることです。

ご意見ありがとうございます。

4

1 に答える 1

5

パフォーマンスについてはコメントできませんが、やりたいことは次のとおりです。

  • を作成しますAVAssetWriter(受信サンプルを取得してH.264で書き出すことができます。現在のiOSリリースでは他のファイル形式はサポートされていないようです)
  • ビデオ フレームを提供するためにアセット ライターに をアタッチAVAssetWriterInputします (アセット ライターは 1 つまたは複数の入力を受け取り、それぞれがアセットのさまざまな側面を提供するため)。
  • をアセット ライター入力にアタッチしAVAssetWriterInputPixelBufferAdaptorて、入力でピクセル バッファーをプッシュできるようにします。リアルタイムでメディア データを期待することをアセット ライターの入力に伝える必要があります。そうすることで、常に入力の準備ができているようにしようとします。フレームを提供するときにフレームタイミングを指定できるため、コードの残りの部分にパフォーマンス要件が課されることはありません。

そこから、CVImageBuffers をピクセル バッファー アダプターにプッシュするだけです。OS X には便利な Core Video OpenGL バッファ タイプがありますが、iOS にはないようです。代わりに、などglReadPixelsと並んCVPixelBufferCreateで、ピクセル バッファーをロックし、そのベース アドレスに直接書き込む必要があります。間にバイトをシャッフルする必要なく、OpenGL に直接渡すことができるものを取得できることを願っています。

iPhone に専用の H.264 エンコーダーがあると仮定すると、主なパフォーマンスのボトルネックは glReadPixels である可能性が高く、フレーム バッファーにあるものはすべて、CPU 用に転送して再フォーマットする必要があります。すべて設定しても結果が遅いようであれば、まずそこを調査します。

于 2011-02-03T19:25:01.030 に答える