网上有两个实现,GDCL – AVEncoder 和 IFVideoPicker。

IFVideoPicker 使用发现还有些问题,例如视频帧不连续(丢帧),简单调试后由于时间原因放弃,选择使用AVEncoder。不过其项目中有不少关于 MP4 和 FLV 文件格式处理的相关细节,值得看看。

这里谈下它们的实现原理:想要采用硬件加速编码视频,苹果提供的只有 AVAssetWriter 类,而它只能写入编码后的文件到指定路径的文件中。我们如果想要实时硬编码,例如将视频流输出到网络,这时就需要从输出文件中不断读取新的编码后视频数据。

从代码上看,AVEncoder 通过使用GCD Dispatch Source监听文件的内容改变,通过此方式高效的读取编码后的数据,然而简单的读取 raw data 并不能满足我们的需求,因此在代码中根据Mp4的文件结构(要看懂这里就需要前面介绍的知识了),每次读取一个完整的NALU后再将数据通过 block 传递给外部调用者处理。

AVEncoder -> 读入CMBuffer -> 调用AVAssetWriter编码Buffer -> 设置 header 的 FileHandler -> 获得第一帧(moov[sps, pps]),切换写入文件(寻找mdat),重设FileHandle -> [输入数据 -> 编码 处理循环 ] -> 发送给调用者处理。

iOS RTMP 视频直播开发笔记(5)------- iOS H.264 实时硬编码实现原理相关推荐

  1. iOS RTMP 视频直播开发笔记(3)- 了解 H.264 编码

    iOS RTMP 视频直播开发笔记(3)- 了解 H.264 编码 本节内容整理自:H264–1–编码原理以及I帧B帧P帧,作者:dxpqxb H264是一种高压缩率的编码标准,如何压缩嘞?一般的视频 ...

  2. iOS RTMP 视频直播开发笔记(6)- 封包 FLV

    iOS RTMP 视频直播开发笔记(6)- 封包 FLV 讲讲FLV文件格式.以及数据如何放置的. FLV里面是由多个Tag构成的:[[tag1][tag2][tag3][tag4]-] 而Tag多种 ...

  3. iOS RTMP 视频直播开发笔记(4)- 关于 AVVideoProfileLevelKey

    iOS RTMP 视频直播开发笔记(4)- 关于 AVVideoProfileLevelKey iOS的Video参数中有一个叫做AVVideoProfileLevelKey的参数,说明太简单,只说了 ...

  4. iOS RTMP 视频直播开发笔记(5)- iOS H.264 实时硬编码实现原理

    iOS RTMP 视频直播开发笔记(5)- iOS H.264 实时硬编码实现原理 网上有两个实现,GDCL – AVEncoder 和 IFVideoPicker. IFVideoPicker 使用 ...

  5. iOS RTMP 视频直播开发笔记(4) ---- 视频清晰度 BP,EP,MP,HP

    iOS的Video参数中有一个叫做AVVideoProfileLevelKey的参数,说明太简单,只说了NSString, H.264 only,只好自己Google了. 既然是H.264专用参数,那 ...

  6. 《视频直播技术详解》系列之七:现代播放器原理

    七牛云于 6 月底发布了一个针对视频直播的实时流网络 LiveNet 和完整的直播云解决方案,很多开发者对这个网络和解决方案的细节和使用场景非常感兴趣. 结合七牛实时流网络 LiveNet 和直播云解 ...

  7. 「视频直播技术详解」系列之六:现代播放器原理

    ​关于直播的技术文章不少,成体系的不多.我们将用七篇文章,更系统化地介绍当下大热的视频直播各环节的关键技术,帮助视频直播创业者们更全面.深入地了解视频直播技术,更好地技术选型. 本系列文章大纲如下: ...

  8. 音视频开发(42)---H.264 SVC 简介

    H.264 SVC 简介 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/CrystalShaw/article/details/81184531 一 ...

  9. 音视频系列2:ffmpeg将H.264解码为RGB

    音视频系列2:ffmpeg将H.264解码为RGB 前言 源码 前言 喜大普奔,终于更新啦,上期说到,如何使用ffmpeg+rtmp进行拉流,不熟悉的小伙伴们,可以先看上一期.今天我们要实现的是使用f ...

最新文章

  1. Re-ID新方法VPM
  2. ceph编译_Ceph编译:L版本及其之后的版本
  3. eclipse创建springboot项目_idea创建基于gradle构建的spring boot项目
  4. 二分查找、upper_bound、lower_bound
  5. :网页设计与重构那些事儿
  6. E:Sleeping Schedule(DP)
  7. C# 的Delegate(委托)
  8. 实现多国语言的几个小知识
  9. [读码时间] 记住密码提示框
  10. java中什么泛型_Java中的泛型
  11. php properties,PHP ReflectionClass getStaticProperties()用法及代码示例
  12. 特性Attibute定义和使用
  13. Linux目录结构详解
  14. 【领域建模】UML类图工具推荐
  15. 计算机专业自我简介50字,2021年个人简历自我评价50字
  16. Spark开发:Spark大数据开发编程示例
  17. Git学习-本地版本库的创建与简单操作
  18. halcon第六讲:基于颜色空间的颜色检测
  19. matlab计算六面体的体积,六面体单元体积坐标方法-工程力学-清华大学.PDF
  20. 汇编语言与微机原理 期末半开卷复习整理(下)

热门文章

  1. 2021年中国显示器行业产量、出货量及出口情况分析:显示器出口数量减少,出口金额增加[图]
  2. Java语言的十大特性
  3. 记录我的caffe2 vs2017安装过程
  4. application.properties数据库配置
  5. poj2449 K短路模板题
  6. 面试官:说下判断数组的方法
  7. 使用docx-preview实现docx文件预览处理方式
  8. python中以下不能创建一个字典的语句是_10、以下不能创建一个字典的语句是
  9. 2021年2月27日
  10. js中事件对象event的兼容性问题