如何执行硬件加速的H.264编码和解码stream?

我能够从相机获取RGBA帧数据,我想用H.264格式进行编码。 我已经使用FFmpeg对H.264video进行编码和解码,但是在640×480的帧大小下,对我的需求来说太慢了。

我想使用硬件加速来加速编码和解码,那我该怎么做呢?

此外,我需要能够通过networkingstream编码的video,并在另一端进行解码。 如何才能做到这一点?

如果你想在iOS上进行H.264video的硬件加速video编码和解码,唯一的办法就是AVFoundation。 不要使用第三方库进行编码或解码,因为它们目前都是CPU绑定的,并且比从AVFoundation获得的要慢得多。 使用第三方编码器或解码器的原因之一是,如果您使用iOS默认不支持的格式。

对于硬件加速解码,您需要使用AVAssetReader实例(或纯播放类播放器之一)。 使用AVAssetReader,我经常可以获得2倍或更高的播放速度来读取H.264编码的video,所以iOS设备使用相当不错的硬件加速。

同样,为了加速编码,您将使用AVAssetWriter。 有一些技巧让AVAssetWriter能够以最快的速度进行编码(在BGRA帧中进行提供,使用像素缓冲池,如果从OpenGL ES读取,则使用iOS 5.0纹理caching),我将在这个答案中详细描述。

如果你想看到一些使用我发现的用于加速编码和解码的最快path的代码,可以看看我的开源GPUImage框架,它与Anastasia链接的框架不同,完全可以自由使用。