热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何用硬件解码iOS上的H.264帧?-HowtodecodeaH.264frameoniOSbyhardwaredecoding?

IhavebeenusedffmpegtodecodeeverysingleframethatIreceivedfrommyipcam.Thebriefcode

I have been used ffmpeg to decode every single frame that I received from my ip cam. The brief code looks like this:

我已经使用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);
}

The code woks fine, but it's software decoding. I want to enhance the decoding performance by hardware decoding. After lots of research, I know it may be achieved by AVFoundation framework. The AVAssetReader class may help, but I can't figure out what's the next.Could anyone points out the following steps for me? Any help would be appreciated.

代码运行良好,但它是软件解码。我想通过硬件解码来提高解码性能。经过大量的研究,我知道这可以通过AVFoundation框架来实现。AVAssetReader类可能会有帮助,但是我不知道下一个是什么。谁能给我指出以下步骤吗?如有任何帮助,我们将不胜感激。

2 个解决方案

#1


19  

iOS does not provide any public access directly to the hardware decode engine, because hardware is always used to decode H.264 video on iOS.

iOS不提供任何直接对硬件解码引擎的公开访问,因为在iOS上,硬件总是被用来解码H.264视频。

Therefore, session 513 gives you all the information you need to allow frame-by-frame decoding on iOS. In short, per that session:

因此,会话513提供了允许在iOS上逐帧解码所需的所有信息。简而言之,每届会议:

  • Generate individual network abstraction layer units (NALUs) from your H.264 elementary stream. There is much information on how this is done online. VCL NALUs (IDR and non-IDR) contain your video data and are to be fed into the decoder.
  • 从H.264基础流中生成单独的网络抽象层单元(NALUs)。有很多关于如何在网上做这件事的信息。VCL NALUs (IDR和非IDR)包含您的视频数据,将被输入解码器。
  • Re-package those NALUs according to the "AVCC" format, removing NALU start codes and replacing them with a 4-byte NALU length header.
  • 根据“AVCC”格式重新打包这些NALUs,删除NALU开始代码,并用4字节的NALU长度头替换它们。
  • Create a CMVideoFormatDescriptionRef from your SPS and PPS NALUs via CMVideoFormatDescriptionCreateFromH264ParameterSets()
  • 通过cmvideoformatdescriptionfromh264parametersets()从您的SPS和PPS NALUs创建CMVideoFormatDescriptionRef ()
  • Package NALU frames as CMSampleBuffers per session 513.
  • 将NALU帧打包为每个会话513的CMSampleBuffers。
  • Create a VTDecompressionSessionRef, and feed VTDecompressionSessionDecodeFrame() with the sample buffers
    • Alternatively, use AVSampleBufferDisplayLayer, whose -enqueueSampleBuffer: method obviates the need to create your own decoder.
    • 或者,使用AVSampleBufferDisplayLayer,它的-enqueueSampleBuffer:方法可以避免创建自己的解码器。
  • 创建一个vtdemopressionsessionref,并使用示例缓冲区提供vtdemopressionsessiondecodeframe(),使用AVSampleBufferDisplayLayer,它的-enqueueSampleBuffer:方法消除了创建自己的解码器的需要。

#2


1  

Edit:

编辑:

This link provide more detail explanation on how to decode h.264 step by step: stackoverflow.com/a/29525001/3156169

这个链接提供了关于如何解码h的更详细的解释。264步:stackoverflow.com/a/29525001/3156169

Original answer:

最初的回答:

I watched the session 513 "Direct Access to Video Encoding and Decoding" in WWDC 2014 yesterday, and got the answer of my own question.

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

The speaker says:

演讲者说:

We have Video Toolbox(in iOS 8). Video Toolbox has been there on OS X for a while, but now it's finally populated with headers on iOS.This provides direct access to encoders and decoders.

我们有视频工具箱(在iOS 8中),视频工具箱在OS X上已经有一段时间了,但是现在它终于在iOS上填充了头部。这提供了对编码器和解码器的直接访问。

So, there is no way to do hardware decoding frame by frame in iOS 7, but it can be done in iOS 8.

因此,在ios7中无法逐帧进行硬件解码,但在ios8中可以实现。

Is there anyone figure out how to directly access to video encoding and decoding frame by frame in iOS 8?

在ios8系统中,有没有人知道如何直接访问视频编码和逐帧解码?


推荐阅读
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 尽管在WPF中工作了一段时间,但在菜单控件的样式设置上遇到了一些基础问题,特别是关于如何正确配置前景色和背景色。 ... [详细]
  • 在Android中实现黑客帝国风格的数字雨效果
    本文将详细介绍如何在Android平台上利用自定义View实现类似《黑客帝国》中的数字雨效果。通过实例代码,我们将探讨如何设置文字颜色、大小,以及如何控制数字下落的速度和间隔。 ... [详细]
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 深入解析C语言中的关键字及其分类
    本文将全面介绍C语言中的关键字,并按照功能将其分为数据类型关键字、控制结构关键字、存储类别关键字和其他关键字四大类,旨在帮助读者更好地理解和运用这些基本元素。C语言中共有32个关键字。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文探讨了如何通过优化 DOM 操作来提升 JavaScript 的性能,包括使用 `createElement` 函数、动画元素、理解重绘事件及处理鼠标滚动事件等关键主题。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 本文探讨了如何在 Spring MVC 框架下,通过自定义注解和拦截器机制来实现细粒度的权限管理功能。 ... [详细]
  • 在测试软件或进行系统维护时,有时会遇到电脑蓝屏的情况,即便使用了沙盒环境也无法完全避免。本文将详细介绍常见的蓝屏错误代码及其解决方案,帮助用户快速定位并解决问题。 ... [详细]
  • Zabbix自定义监控与邮件告警配置实践
    本文详细介绍了如何在Zabbix中添加自定义监控项目,配置邮件告警功能,并解决测试告警时遇到的邮件不发送问题。 ... [详细]
  • 本文探讨了如何在PHP与MySQL环境中实现高效的分页查询,包括基本的分页实现、性能优化技巧以及高级的分页策略。 ... [详细]
  • 处理Android EditText中数字输入与parseInt方法
    本文探讨了如何在Android应用中从EditText组件安全地获取并解析用户输入的数字,特别是用于设置端口号的情况。通过示例代码和异常处理策略,展示了有效的方法来避免因非法输入导致的应用崩溃。 ... [详细]
  • 本文详细介绍了Oracle 11g中的创建表空间的方法,以及如何设置客户端和服务端的基本配置,包括用户管理、环境变量配置等。 ... [详细]
author-avatar
Tags | 热门标签
RankList | 热门文章
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有