videoToolbox:硬解码

前言:VTDecompressionSession

工作流程:

1:创建解压的会话。

2:配置会话属性。

3:解压视频帧数据。

4:释放会话、释放资源。

介绍  VTDecompressionSession

管理传入视频数据解压缩的会话对象。

解压缩会话支持视频帧序列的解压缩。

核心思路

1:  用NSInputStream读入原始H.264码流,

2:  用CADisplayLink控制显示速率,

3:  用NALU的前四个字节识别SPS和PPS并存储,

4:  当读入IDR帧的时候初始化VideoToolbox,并开始同步解码;

5:  解码得到的CVPixelBufferRef会传入OpenGL ES类进行解析渲染。

0.(可选)创建一个视频格式信息

当你要解压H264格式的视频,你要用SPS,PPS数据来创建一个CMVideoFormatDescription,得到它的格式信息

一:创建解压的会话。

1.1:方法说明:
OSStatus VTDecompressionSessionCreate(
    
CFAllocatorRef allocator,   
//1:分配器,传NULL会使用默认的分配器
CMVideoFormatDescriptionRef videoFormatDescription, //2:源视频帧的描述。
CFDictionaryRef videoDecoderSpecification,  //3:必须使用的特定视频解码器。传递NULL以让VideoToolbox选择解码器。
CFDictionaryRef destinationImageBufferAttributes,  //4:
目标图片缓存的属性.传NULL会设为没有requirements. const VTDecompressionOutputCallbackRecord *outputCallback,//5:回调输出.如果,你要用VTDecompressionSessionDecodeFrameWithOutputHandler(_:_:_:_:_:)来解码视频帧,你可以设为NULL.不然就得不到输出数据.
 VTDecompressionSessionRef  _Nullable *decompressionSessionOut  //6:用于接收新的decompression session
);  

 

1.2:实例解析

      VTDecodeFrameFlags flags = 0;

VTDecodeInfoFlags flagOut = 0;

// 默认是同步操作。

// 调用didDecompress,返回后再回调

OSStatus decodeStatus = VTDecompressionSessionDecodeFrame(mDecodeSession,

sampleBuffer,

flags,

&outputPixelBuffer,

&flagOut);

最新文章

  1. 三大框架SSH整合
  2. Linux CGroup之freezer分析与应用
  3. TensorFlow安装(Ubuntu 16.04)
  4. JS 控制CSS样式表
  5. Android安全开发之WebView中的地雷
  6. Spring定时器,定时执行(quartz)
  7. 14SpringMvc_在业务控制方法中写入HttpServletRequest,HttpServletResponse等传统web参数(这个知识点知道就好了,不推荐这么去做)
  8. 【bzoj1036】 ZJOI2008—树的统计Count
  9. *ecshop 首页促销价显示倒计时
  10. vim插件介绍
  11. Gitlab安装和使用相关信息
  12. [改善Java代码]用枚举实现工厂方法模式更简洁
  13. 微信js-sdk,选择图片,上传,下载到本地,php服务端
  14. vs开发常用快捷键
  15. linux磁盘管理系列-软RAID的实现
  16. Maven-04: 三套生命周期
  17. mysql 命令语句
  18. LINUX内核分析第七周学习总结——可执行程序的装载
  19. _spellmod_leech_aura
  20. 读《SQL优化核心思想》:你不知道的优化技巧

热门文章

  1. 使用sc 命令写脚本 添加和删除服务 简单应用
  2. 五分钟学会悲观乐观锁-java vs mysql vs redis三种实现
  3. Mybatis mapper动态代理的原理详解
  4. mave 笔记
  5. scrapy学习(完全版)
  6. Leetcode 5. Longest Palindromic Substring(最长回文子串, Manacher算法)
  7. Guava google缓存机制
  8. 「每日五分钟,玩转JVM」:线程共享区
  9. JavaScript算法模式——动态规划和贪心算法
  10. 迁移桌面程序到MS Store(10)——在Windows S Mode运行