iOS的VideoToolBox与Android的MediaCodec对PTS的处理异同

摘要:
视频源,不论是从采集设备采集到的,还是本身压制好的文件,其流中的数据都是按照编码顺序存储的。比如12345,5帧视频数据,1编码成I帧,234编码成B帧,5编码成P帧。

视频源,不论是从采集设备采集到的,还是本身压制好的文件,其流中的数据都是按照编码顺序存储的。比如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. iOSVideoToolBox

VTB本身不会对解码后的图像进行重排序,所以需要开发者缓存几帧数据(一般是4帧),重排序之后再送入渲染模块。

2. AndroidMediaCodec

以同样的数据流输入到MediaCodec,MediaCodec输出的流是经过重排序的,也就是说,可以直接送入渲染模块渲染。

免责声明:文章转载自《iOS的VideoToolBox与Android的MediaCodec对PTS的处理异同》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇用Delphi进行word开发linux 系统时间与硬件时间与中国标准时间下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Android 播放视频并获取指定时间的帧画面

最近做的项目要求既能播放视频(类似于视频播放器),又能每隔1s左右获取一帧视频画面,然后对图片进行处理,调查了一周,也被折磨了一周,总算找到了大致符合要求的方法。首先对调查过程中涉及到的方法进行简单介绍,再重点介绍最终所采用的方法,话不多说,进入正题。 一.MediaMetadataRetriever 播放视频并取得画面的一帧,大家最先想到应该都是这个,我...