视频源,不论是从采集设备采集到的,还是本身压制好的文件,其流中的数据都是按照编码顺序存储的。比如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本身不会对解码后的图像进行重排序,所以需要开发者缓存几帧数据,重排序之后再送入渲染模块。

2. Android MediaCodec

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

iOS的VideoToolBox与Android的MediaCodec对PTS的处理异同的更多相关文章

  1. Android NDK MediaCodec在ijkplayer中的实践

    https://www.jianshu.com/p/41d3147a5e07 从API 21(Android 5.0)开始Android提供C层的NDK MediaCodec的接口. Java Med ...

  2. Android多媒体--MediaCodec 中文API文档

    *由于工作需要,需要利用MediaCodec实现Playback及Transcode等功能,故在学习过程中翻译了Google官方的MediaCodec API文档,由于作者水平限制,文中难免有错误和不 ...

  3. Android 用MediaCodec实现视频硬解码(转)

    本文向你讲述如何用android标准的API (MediaCodec)实现视频的硬件编解码.例程将从摄像头采集视频开始,然后进行H264编码,再解码,然后显示.我将尽量讲得简短而清晰,不展示 那些不相 ...

  4. 如何把iOS代码编译为Android应用

    新闻 <iPhone 6/6 Plus中国销量曝光:单月销量650万>:据iSuppli Corp.中国研究总监王阳爆料,iPhone 6和iPhone 6 Plus在国内受欢迎的情况大大 ...

  5. Android 用MediaCodec实现视频硬解码

    http://blog.csdn.net/halleyzhang3/article/details/11473961 http://www.360doc.com/content/14/0119/10/ ...

  6. iOS Simulator 模拟器 与 Android Emulator 仿真器:为什么叫不同的英文名字?(待补充)

    iOS Simulator 模拟器 与 Android Emulator 仿真器:为什么叫不同的英文名字?(待补充)

  7. Android平台MediaCodec避坑指北

    https://www.jianshu.com/p/5d62a3cf0741 最近使用MediaCodec做编解码H264,写一点东西以免自己再次掉坑. 先说一下具体环境,使用的是,Windows10 ...

  8. 【IOS】ios中NSUserDefault与android中的SharedPreference用法简单对比

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3405308.html 有Android开发经验的朋友对Shar ...

  9. iOS的 context 和Android 中的 canvas

    ios 想要绘图,要用到CGContextRef类.最基本的用法是在- (void)drawRect:(CGRect)rect 函数中绘制. Android 中要用到Canvas类.最基本的用法是在  ...

随机推荐

  1. 利用elasticsearch-dump实现es索引数据迁移附脚本

    1.安装环境 CentOS Linux release 7.5.1804 (Core) 1 2.安装nodejs yum install -y nodejs 1 3.验证nodejs [root@lo ...

  2. 《鸟哥的Linux私房菜:服务器搭建篇》第一部分学习笔记

    零.问题集 1. 我们购买网络时,有4M.5M.8M.10M乃至100M,运营商是如何控制每个用户的带宽的? 一.网络基础概念 1. 交换器与集线器最大的差异,在于交换器内有一个特别的内存, 这个内存 ...

  3. Python if __name__ == '__main__': 理解

    if __name__ == '__main__':是为了区分.py文件是自己直接被执行还是被其他文件调用. 当.py文件直接被执行时,默认的是 __name__ = '__main__',因此条件成 ...

  4. Eureka【支持Remote Region】

    工程公共pom依赖 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncod ...

  5. JavaScript(js)笔记

    js注释 JavaScript注释与Java注释相同 // 单行注释 /* 多行注释 */ js五大基本类型:   number(数值型).string(字符串性).boolean(布尔型).unde ...

  6. Thinking In Java 4th Chap3 操作符

    若String后接一‘+’运算符,其后元素自动转化为String类型 注意:若对对象赋值另一对象,操作对应的是引用,如c=d,则c和d都指向原来d指向的对象 生成随机数:Random rand=new ...

  7. ORACLE通过JOB定时创建序列

    http://blog.csdn.net/cuihaiyang/article/details/7872982 因为业务需要每月需要增加一个序列,想到了使用job定时创建,每次创建一年的.写此job的 ...

  8. 基于【 Docker】一 || ElK安装部署使用教程

    一.ELK介绍 1.ELK组成 ELK由Elasticsearch.Logstash和Kibana三部分组件组成: Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发 ...

  9. SSM框架警告/错误集合

    警告: 1.使用Eclipse的Spring Elements组件的时候发现会提示有警告:Expect at least one bean match() 解决办法:项目可以正常运行,未有报错,在其他 ...

  10. ember server禁用Livereload server on http://localhost:49152

    ember server --live-reload=false