カメラからRGBAフレームデータを取得できますが、H.264形式でエンコードしたいと思います。FFmpegを使用してH.264ビデオをエンコードおよびデコードしましたが、フレームサイズが640x480の場合、ニーズに対して遅すぎます。
ハードウェアアクセラレーションを使用してエンコードとデコードを高速化したいのですが、どうすればよいですか?
また、エンコードされたビデオをネットワーク経由でストリーミングし、もう一方の端でデコードできる必要があります。これはどのように行うことができますか?
iOSでH.264ビデオのハードウェアアクセラレーションによるビデオエンコーディングとデコーディングを実行する場合、唯一の方法はAVFoundationです。エンコードまたはデコードにサードパーティのライブラリを使用しないでください。これらはすべて現在CPUにバインドされており、AVFoundationから取得するものよりもはるかに低速です。サードパーティのエンコーダーまたはデコーダーを使用する理由の1つは、デフォルトでiOSでサポートされていない形式で作業している場合です。
ハードウェアアクセラレーションによるデコードの場合は、AVAssetReaderインスタンス(または純粋な再生用のプレーヤークラスの1つ)を使用することをお勧めします。AVAssetReaderを使用すると、H.264でエンコードされたビデオを読み取るために、定期的に2倍以上の再生速度が得られるため、iOSデバイスはそのためにかなり優れたハードウェアアクセラレーションを使用します。
同様に、高速化されたエンコーディングには、AVAssetWriterを使用します。AVAssetWriterを最高速度でエンコードするための秘訣がいくつかあります(BGRAフレームでのフィード、ピクセルバッファープールの使用、OpenGLESから読み取る場合はiOS5.0テクスチャキャッシュの使用)。これについては、この回答で詳しく説明します。
エンコードとデコードを高速化するために私が見つけた最速のパスを使用するコードを確認したい場合は、Anastasiaによってリンクされているものとは異なり、完全に無料で使用できるオープンソースのGPUImageフレームワークを確認できます。