iOS RTMP 视频直播开发笔记(5)------- iOS H.264 实时硬编码实现原理
来源:互联网 发布:matlab输出矩阵 编辑:程序博客网 时间:2024/06/05 03:50
网上有两个实现,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 -> [输入数据 -> 编码 处理循环 ] -> 发送给调用者处理。
0 0
- iOS RTMP 视频直播开发笔记(5)- iOS H.264 实时硬编码实现原理
- iOS RTMP 视频直播开发笔记(5)- iOS H.264 实时硬编码实现原理
- iOS RTMP 视频直播开发笔记(5)------- iOS H.264 实时硬编码实现原理
- iOS RTMP 视频直播开发笔记(5)------- iOS H.264 实时硬编码实现原理
- iOS RTMP 视频直播开发笔记(3)- 了解 H.264 编码
- iOS RTMP 视频直播开发笔记(3)- 了解 H.264 编码
- iOS RTMP 视频直播开发笔记(2)----关于MP4及H.264
- iOS RTMP 视频直播开发笔记(2)----关于MP4及H.264
- iOS RTMP 视频直播开发笔记(4)- 关于 AVVideoProfileLevelKey
- iOS RTMP 视频直播开发笔记(6)- 封包 FLV
- iOS RTMP 视频直播开发笔记(6)- 封包 FLV
- iOS RTMP 视频直播开发笔记(4)- 关于 AVVideoProfileLevelKey
- iOS RTMP 视频直播开发笔记(6)- 封包 FLV
- iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)
- iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)
- iOS 简单的视频直播功能开发(实时视音频流录制编码+RTMP传输+实时拉流解码播放)
- iOS RTMP 视频直播开发笔记(4) ---- 视频清晰度 BP,EP,MP,HP
- iOS RTMP 视频直播开发笔记(4) ---- 视频清晰度 BP,EP,MP,HP
- 自己随手记得Ubuntu的一些命令
- 强大的GPUImage,实现美颜及各种效果
- iOS RTMP 视频直播开发笔记(4) ---- 视频清晰度 BP,EP,MP,HP
- MySQL中字符串拼接函数(连接字符串)
- 安装vim中文帮助vimcdoc
- iOS RTMP 视频直播开发笔记(5)------- iOS H.264 实时硬编码实现原理
- java中的进程,线程,线程池总结
- ath9k网卡驱动相关
- 连续值、缺失值 、正负样本不均衡处理方法
- Hibernate基础之最简单的例子
- App Store 发布 2016 年最新审核规则
- Lock wait timeout exceeded异常
- C#之params参数使用
- FFMPEG中的时间问题