首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在iOS上通过硬件解码来解码H.264帧?

如何在iOS上通过硬件解码来解码H.264帧?
EN

Stack Overflow用户
提问于 2014-08-08 14:22:14
回答 2查看 18K关注 0票数 15

我已经使用ffmpeg来解码我从我的ip摄像头收到的每一帧。简短的代码如下所示:

代码语言:javascript
复制
-(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类可能会有所帮助,但是我不知道next.Could是什么。有人给我指出了下面的步骤吗?任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-28 02:37:02

由于硬件始终用于在iOS上解码H.264视频,因此iOS不提供对硬件解码引擎的任何公共访问。

因此,session 513为您提供了在iOS上进行逐帧解码所需的所有信息。简而言之,每个会话:

  • 从H.264基本流生成单独的网络抽象层单元(NALU)。网上有很多关于如何做到这一点的信息。VCL (IDR和non-IDR)包含您的视频数据,并且将根据"AVCC“格式将这些NALU馈送到decoder.
  • Re-package中,移除NALU起始码并将它们替换为4字节的NALU长度报头。
  • 经由VCL帧从s和PPS创建CMVideoFormatDescriptionRef作为每个会话的CMSampleBuffer513。
  • 创建VTDecompressionSessionRef,并使用样本缓冲器来馈送VTDecompressionSessionDecodeFrame() AVSampleBufferDisplayLayer,它的-enqueueSampleBuffer:方法消除了创建自己的decoder.

的需要

票数 23
EN

Stack Overflow用户

发布于 2014-08-14 13:47:36

编辑:

此链接提供了有关如何逐步解码h.264的更多详细说明:

原始答案:

昨天我观看了WWDC 2014的513节“视频编码和解码的直接访问”,并得到了我自己的问题的答案。

演讲者说:

我们有视频工具箱(在iOS 8中)。视频工具箱已经在OS X上存在了一段时间了,但现在它终于在iOS.This上填充了头文件,可以直接访问编码器和解码器。

因此,在iOS 7中无法逐帧进行硬件解码,但在iOS 8中可以做到。

有没有人知道如何在iOS 8中一帧一帧地直接访问视频编解码?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25197169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档