我能够从相机获取RGBA帧数据,我想以H.264格式对其进行编码。我使用FFmpeg对H.264视频进行编码和解码,但帧大小为640x480,这对我的需求来说太慢了。
我想使用硬件加速来加速编码和解码,那我该怎么做呢?
此外,我需要能够通过网络流式传输编码视频,并在另一端解码。怎么办呢?
答案 0 :(得分:17)
如果你想在iOS上对H.264视频进行硬件加速视频编码和解码,唯一的方法就是AVFoundation。不要使用第三方库进行编码或解码,因为它们目前都受CPU限制,并且比从AVFoundation获得的速度慢得多。使用第三方编码器或解码器的一个原因是,如果您使用的是默认情况下iOS中不支持的格式。
对于硬件加速解码,您需要使用AVAssetReader实例(或其中一个播放器类进行纯播放)。使用AVAssetReader,我经常获得2倍或更高的播放速度来读取H.264编码的视频,因此iOS设备使用了一些相当不错的硬件加速。
同样,对于加速编码,您将使用AVAssetWriter。有一些技巧可以让AVAssetWriter以最佳速度进行编码(使用像素缓冲池,使用iOS 5.0纹理缓存,如果从OpenGL ES读取),我会在this answer中详细描述。
如果你想看到一些使用我发现的用于加速编码和解码的最快路径的代码,你可以看一下我的开源GPUImage框架,与Anastasia链接的框架不同,它完全是免费使用。