カメラから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テクスチャキャッシュの使用) この回答 。
エンコードとデコードを高速化するために私が見つけた最速のパスを使用するコードを見たい場合は、私のオープンソースを見ることができます GPUImage フレームワークは、アナスタシアによってリンクされているものとは異なり、完全に自由に使用できます。