如何为流媒体执行硬件加速的H.264编码和解码?

kin*_*ing 14 encode decode h.264 ios

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

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

此外,我需要能够通过网络流式传输编码视频,并在另一端解码.如何才能做到这一点?

Bra*_*son 18

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

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

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

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

  • @Brad史蒂夫的方式真的不适合实时直播.商业人士正在做一些不同的事情.我不知道它是什么方式,但它是实时工作. (2认同)