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