パフォーマンスについてはコメントできませんが、やりたいことは次のとおりです。
- を作成します
AVAssetWriter
(受信サンプルを取得してH.264で書き出すことができます。現在のiOSリリースでは他のファイル形式はサポートされていないようです)
- ビデオ フレームを提供するためにアセット ライターに をアタッチ
AVAssetWriterInput
します (アセット ライターは 1 つまたは複数の入力を受け取り、それぞれがアセットのさまざまな側面を提供するため)。
- をアセット ライター入力にアタッチし
AVAssetWriterInputPixelBufferAdaptor
て、入力でピクセル バッファーをプッシュできるようにします。リアルタイムでメディア データを期待することをアセット ライターの入力に伝える必要があります。そうすることで、常に入力の準備ができているようにしようとします。フレームを提供するときにフレームタイミングを指定できるため、コードの残りの部分にパフォーマンス要件が課されることはありません。
そこから、CVImageBuffers をピクセル バッファー アダプターにプッシュするだけです。OS X には便利な Core Video OpenGL バッファ タイプがありますが、iOS にはないようです。代わりに、などglReadPixels
と並んCVPixelBufferCreate
で、ピクセル バッファーをロックし、そのベース アドレスに直接書き込む必要があります。間にバイトをシャッフルする必要なく、OpenGL に直接渡すことができるものを取得できることを願っています。
iPhone に専用の H.264 エンコーダーがあると仮定すると、主なパフォーマンスのボトルネックは glReadPixels である可能性が高く、フレーム バッファーにあるものはすべて、CPU 用に転送して再フォーマットする必要があります。すべて設定しても結果が遅いようであれば、まずそこを調査します。