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

转载 2016年05月30日 18:30:38


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

网上有两个实现,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 -> [输入数据 -> 编码 处理循环 ] -> 发送给调用者处理。

拓展阅读

GCD介绍(三): Dispatch Sources

原创文章,采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。
转载请注明:转载自 Tony's blog,原文网址:http://itony.me/813.html

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

本节内容整理自:H264–1–编码原理以及I帧B帧P帧,作者:dxpqxb H264是一种高压缩率的编码标准,如何压缩嘞?一般的视频采集都是25帧/秒,也就是每秒截图25次,其实每一张图片的...

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

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

iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)

推流端:自己开发难度很大,视频直播就被卡死了,音频根本没来得及弄,最终使用了github上开源的框架。                原生开发基本流程:AVFoundation获取视频流...

iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)

http://blog.csdn.net/pilgrim1385/article/details/51681332 推流端:自己开发难度很大,视频直播就被卡死了,音频根本没来得及弄,最终使用...
  • jeffasd
  • jeffasd
  • 2016年10月19日 14:01
  • 2433

iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)

推流端:自己开发难度很大,视频直播就被卡死了,音频根本没来得及弄,最终使用了github上开源的框架。                原生开发基本流程:AVFoundation获取视频流...

iOS RTMP 视频直播开发笔记(1) – 采集摄像头图像

iOS RTMP 视频直播开发笔记(1) – 采集摄像头图像 1. 采集硬件(摄像头)视频图像 这里简单说下 iOS 的摄像头采集。 首先初始化AVCapture...

iOS RTMP 视频直播开发笔记(1) – 采集摄像头图像

iOS RTMP 视频直播开发笔记(1) – 采集摄像头图像

iOS RTMP 视频直播开发笔记(3) --- 与帧相关的概念

H264是一种高压缩率的编码标准,如何压缩嘞?一般的视频采集都是25帧/秒,也就是每秒截图25次,其实每一张图片的内容都相差不大,压缩的办法就是利用算法,只将每张图片变动差异化的部分保存下来,这样视频...

iOS RTMP 视频直播开发笔记(1)----- 采集摄像头图像

这里简单说下 iOS 的摄像头采集。 首先初始化AVCaptureSession,说到Session,有没有人想到AVAudioSession呢? 12// 初始化 AVCaptureSes...

iOS RTMP 视频直播开发笔记(2) – 了解 MP4 文件格式

虽然我们不需要了解详细的编码实现细节,但对于文件格式和相关名词的了解,对于开发仍然是非常必要的。 由于之后的 iOS 编码实现中需要首先生成 MP4 视频文件,然后从 MP4 文件中提取 NAL...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS RTMP 视频直播开发笔记(5)- iOS H.264 实时硬编码实现原理
举报原因:
原因补充:

(最多只允许输入30个字)