iOS的VideoToolBox与Android的MediaCodec对PTS的处理异同
2019-12-21 20:42 jiayayao 阅读(1577) 评论(0) 编辑 收藏 举报视频源,不论是从采集设备采集到的,还是本身压制好的文件,其流中的数据都是按照编码顺序存储的。比如1 2 3 4 5,5帧视频数据,1编码成I帧,2 3 4编码成B帧,5编码成P帧。
编码过程:
1. 编码1为I帧;
2. 2,3,4准备编码为B帧,先缓存下来,记录其时间点作为PTS;
3. 再编码5,编码为P帧,5的DTS相对2,3,4靠前,PTS相对于2,3,4靠后;
4. 编码2,3,4,编码为B帧;
存储过程:
存储顺序与编码顺序一致,编码后的顺序为(DTS顺序):1 5 2 3 4
Android和iOS的硬解码器都不会修改输入PTS,但解码细节略有差别;
1. iOS VideoToolBox
VTB本身不会对解码后的图像进行重排序,所以需要开发者缓存几帧数据,重排序之后再送入渲染模块。具体需缓存的帧个数可以读取视频的extradata,264读取SPS中的num_ref_frames,该字段规定了可能在视频序列中任何图像帧间预测的解码过程中用到的短期参考帧和长期参考帧、互补参考厂对以及不成对的参考场的最大数量,取值范围在0到MaxDpbSize。265读取VPS中vps_max_num_reorder_pics,该字段表示在CVS中解码顺序在某一帧图像之后,而显示顺序在该图像前的图像最大数量。
2. Android MediaCodec
以同样的数据流输入到MediaCodec,MediaCodec输出的流是经过重排序的,也就是说,可以直接送入渲染模块渲染。
本文来自博客园,作者:jiayayao,邮箱:jiayayao@126.com,转载请注明原文链接:https://www.cnblogs.com/jiayayao/p/12078164.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架