14

我能够从相机获取 RGBA 帧数据,并且我想将其编码为 H.264 格式。我使用 FFmpeg 对 H.264 视频进行编码和解码,但是对于 640x480 的帧大小,它对于我的需要来说太慢了。

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

此外,我需要能够通过网络传输编码的视频并在另一端对其进行解码。如何才能做到这一点?

4

1 回答 1

18

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

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

同样,对于加速编码,您将使用 AVAssetWriter。有一些技巧可以让 AVAssetWriter 以最佳速度进行编码(输入 BGRA 帧,使用像素缓冲池,如果从 OpenGL ES 读取,则使用 iOS 5.0 纹理缓存),我在这个答案中详细描述了这些技巧。

如果您想查看一些使用我发现的最快路径进行加速编码和解码的代码,您可以查看我的开源GPUImage框架,与 Anastasia 链接的框架不同,它完全免费使用。

于 2012-04-26T14:57:16.383 回答