如何通过硬件解码在iOS上解码H.264帧?
我已经用ffmpeg解码了我从ip摄像机接收到的每一帧。简短的代码如下所示:如何通过硬件解码在iOS上解码H.264帧?,ios,ffmpeg,avfoundation,h.264,hardware-acceleration,Ios,Ffmpeg,Avfoundation,H.264,Hardware Acceleration,我已经用ffmpeg解码了我从ip摄像机接收到的每一帧。简短的代码如下所示: -(void) decodeFrame:(unsigned char *)frameData frameSize:(int)frameSize{ AVFrame frame; AVPicture picture; AVPacket pkt; AVCodecContext *context; pkt.data = frameData; pat.size = frameSize;
-(void) decodeFrame:(unsigned char *)frameData frameSize:(int)frameSize{
AVFrame frame;
AVPicture picture;
AVPacket pkt;
AVCodecContext *context;
pkt.data = frameData;
pat.size = frameSize;
avcodec_get_frame_defaults(&frame);
avpicture_alloc(&picture, PIX_FMT_RGB24, targetWidth, targetHeight);
avcodec_decode_video2(&context, &frame, &got_picture, &pkt);
}
代码工作正常,但它是软件解码。我想通过硬件解码来提高解码性能。经过大量的研究,我知道它可以通过AVFoundation框架实现。
Avassetrader类可能会有所帮助,但我不知道下一步是什么。有人能为我指出以下步骤吗?任何帮助都将不胜感激。编辑:
此链接提供有关如何逐步解码h.264的详细说明: 原始答复: 昨天,我观看了WWDC 2014第513次会议“直接访问视频编码和解码”,并得到了我自己问题的答案 发言者说: 我们有视频工具箱(在iOS 8中)。视频工具箱已经在那里了 OSX已经有一段时间了,但现在它终于在 这提供了对编码器和解码器的直接访问 因此,在iOS 7中无法逐帧进行硬件解码,但可以在iOS 8中进行
有人知道如何在iOS 8中一帧一帧地直接访问视频编码和解码吗?iOS不提供任何直接访问硬件解码引擎的公共访问,因为在iOS上总是使用硬件来解码H.264视频 因此,提供了允许在iOS上逐帧解码所需的所有信息。简言之,每届会议:
- 从H.264基本流生成单个网络抽象层单元(NALU)。关于如何在网上实现这一点,有很多信息。VCL NALU(IDR和非IDR)包含您的视频数据,并将输入解码器
- 根据“AVCC”格式重新打包这些NALU,删除NALU开始代码,并将其替换为4字节NALU长度头
- 通过
cmvideoformatdescriptioncreatefromH264参数集()
- 每个会话513将NALU帧打包为
sCMSampleBuffer
- 创建一个
,并使用示例缓冲区馈送VTDecompressionRef
VTDecompressionDecodeFrame()
- 或者,使用
,其AVSampleBufferDisplayLayer
方法无需创建自己的解码器-enqueueSampleBuffer:
- 或者,使用