我已经使用ffmpeg来解码我从ip cam收到的每一帧。简短的代码如下:
-(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框架实现。 AVAssetReader类可能有所帮助,但我无法弄清楚下一步是什么。有人可以为我指出以下步骤吗?任何帮助将不胜感激。
答案 0 :(得分:22)
iOS不直接向硬件解码引擎提供任何公共访问权限,因为始终 用于解码iOS上的H.264视频。
因此,session 513为您提供了在iOS上允许逐帧解码所需的所有信息。简而言之,按照那个会议:
CMVideoFormatDescriptionRef
CMVideoFormatDescriptionCreateFromH264ParameterSets()
CMSampleBuffer
。VTDecompressionSessionRef
,并使用示例缓冲区提供VTDecompressionSessionDecodeFrame()
AVSampleBufferDisplayLayer
,-enqueueSampleBuffer:
方法无需创建自己的解码器。答案 1 :(得分:2)
修改强>
此链接提供了有关如何逐步解码h.264的更多详细说明:stackoverflow.com/a/29525001/3156169
原始答案:
我观看了会话513"直接访问视频编码和解码"在昨天的WWDC 2014中,得到了我自己的问题的答案。
发言人说:
我们有视频工具箱(在iOS 8中)。 Video Toolbox一直在那里 OS X有一段时间了,但现在它终于填充了标题 iOS.This提供对编码器和解码器的直接访问。
因此,在iOS 7中无法逐帧进行硬件解码,但可以在iOS 8中完成。
有没有人想出如何在iOS 8中逐帧直接访问视频编码和解码?