1 条带类型(slice type)

  x264的条带有三种基本类型分别为:I(主要用于帧内图像编码)、P(用于帧间前向参考预测图像编码)、B(用于帧间双向参考预测图像编码)、SI与SP(切换码流时用),其中I条带只包括I宏块、P条带除了P宏块还可以是I宏块,B条带除了B宏块也可以是I宏块。

2 帧类型(简单起见不考虑隔行视频情况)

  就x264码流结构来说不存在帧这个封装层次,也就没有帧的概念,站在编码角度看,帧类型是编码开始前由应用层手工指定,如果指定会AUTO类型,由编码器在编码的初始化阶段分配帧类型,另外就码流结构来说与帧最接近的码流封装层次是条带,条带又有条带类型,一帧视频图像可以编码出多个条带,为什么这么做呢,主要是为了隔离错误,如果一个条带在类似于UDP这样的非可靠传输中丢失或部分数据出现错误从而解码失败时,不影响其它条带解码。

  编码时跟据帧类型确定条带类型,比如I帧的所有的条带类型都是I类型,P帧的所有条带类型都是P类型,B帧的所有条带类型都是P类型,除此之外,在X264还有一个特别的IDR帧(就编码来说其本身就是I帧只是他们的NAL类型不同)与Bref帧(就编码来说其本身就是B帧类型只是其可以做为后序编码帧的参考帧)。解码时反过来即可推出帧类型。

3 NAL类型中的承载条带数据的五种类型

  类型1:非IDR图像的编码条带(不分区),包括I(非IDR)、P、B、Bref

  类型2:编码条带数据分区A

  类型3:编码条带数据分区B

  类型4:编码条带数据分区C

  类型5:IDR图像的编码条带(不分区),只有IDR,从类型1与5可以分辨出IDR帧,尽一步跟据条带头的类型可以分辨出I帧

  为什么要分区?分区是为了对重要程度不同的句法元素采用不同的传输手段,比如片头的句法元素传输时可以要求对方确认,而为了实时性部分编码数据丢失就算了,不重传了。

  何为分区呢?就是将片头数据、片里面包括的帧内编码数据、片里面包括的帧间编码数据分成三种封装格式,并分别命名为分类2、分类3、分类4(实际上分类是一种关联手段,比如编码条带数据分区A对应分类2,实际上在句法表中所有标分类为2的句法元素都是是可以并只能包括在编码条带数据分区A中的句法元素),并分别分配NAL类型为类型2、类型3、类型4。类型1可以包括分类2、分类3、类型4的所有句法元素(具体到不同的条带类型,可能只包括分类2与分类3,也可能只包括分类2与分类4,也可能是包括分类2、分类3、分类4),类型5只包括分类2、分类3所有句法元素。

  对于I条带来说,可以用类型1的NAL封装,也可以用类型2与类型3这一组合封装。

  对于P、B条带来说,可以用类型1的NAL封装,也可以用类型2与类型4这一组合封装,还可以用类型2、类型3与类型4这一组合来封装。

  IDR帧的I条带用类型5封装肯定是可以的了,但是如果采用分区机制呢?分区后通过码流如何识别出I帧与IDR帧呢?

x264中的帧类型、条带类型、数据分区(data partition)的更多相关文章

  1. 将String类型的json数据转换为真正的json数据

    问题 在做JavaWeb项目的时候,我们经常需要将Java对象转化为Json数据格式响应到前台页面,但是转化完成之后,看着是Json类型的数据格式,但实际上是字符串类型,在这里说两个方法将String ...

  2. koa 基础(十)原生node.js 在 koa 中获取表单提交的数据

    1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...

  3. 使用头文件cfloat中的符号常量获知浮点类型数据的表数范围---gyy整理

    使用头文件cfloat中的符号常量获知浮点类型数据的表数范围 cfloat头文件包含了系统的浮点数的长度限制 头文件climits中的符号常量是获知整型数据的表数范围,并不能获取浮点类型数据的表数范围 ...

  4. java中,字符串类型的时间数据怎样转换成date类型。

    将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...

  5. C#中遍历DataTable类型并删除行数据

    从数据库中读取出了DataSet类型的数据,通过dataSet.Tables[0]获得DataTable类型的数据. 这时候如果想批量修改dataTable中的内容,比如要删除dataTable中co ...

  6. NET中的引用类型和值类型 zt

    .NET中的类型分为值类型和引用类型,他们在内存布局,分配,相等性,赋值,存储以及一些其他的特性上有很多不同,这些不同将会直接影响到我们应用程序 的效率.本文视图对.NET 基础类型中的值类型和引用类 ...

  7. opencv中Mat与IplImage,CVMat类型之间转换

    opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...

  8. Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...

  9. Python3.x中bytes类型和str类型深入分析

    Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...

随机推荐

  1. Discuz开源论坛

      Discuz开源论坛本地部署自动生成数据库   这个版本可能比较有点老,但是万变不离其宗,再新的版本都是在已有的基础上更新的,所以掌握方法是最重要的! 先上几张安装成功后的图 (安装成功的论坛首页 ...

  2. 自己动手写spring容器(3)

    好久没有写博客了,今天闲下来将之前未完成的表达出来. 在之前的文章自己动手写spring容器(2)中完成了对spring的依赖注入的实现,这篇将会介绍spring基于注解的依赖注入的实现. 在一般的J ...

  3. 【Linux】CentOS 学习笔记之一(安装配制)

    如何打开命令窗口:应用程序>系统工具>终端 如何获取root 权限:在终端下,输入su 再输入密码(密码不显示在屏幕上) 如何将英文版转换成中文: [root@localhost ~]# ...

  4. 设计模式(二)-- 外观模式(Facade)

    设计模式(二) 外观模式(Facade) 为了解决子系统外部的客户端在使用子系统的时候,既能简单地使用这些子系统内部的模块功能,而又不用客户端去与子系统内部的多个模块交互的问题. 为子系统中的一组接口 ...

  5. VS2012下基于Glut 矩阵变换示例程序2:

    在VS2012下基于Glut 矩阵变换示例程序:中我们在绘制甜圈或者圆柱时使用矩阵对相应的坐标进行变换后自己绘制甜圈或者圆柱.我们也可以使用glLoadMatrixf.glLoadMatrixd载入变 ...

  6. Linux centos7环境下安装MySQL的步骤详解

    Linux centos7环境下安装MySQL的步骤详解 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执行 ...

  7. html标签详解,html标签属性大全(完美版),包括css属性详解

    这个是平时放在笔记里,需要什么了,查下当字典用,想不起来了就查下,个人在用有道云,查询框一输就找到了.下篇会把我整理手机的html5发了.引用在某处常看到的话.楼主耗时费心整理··请拿走······· ...

  8. Elasticsearch 2.3 (ELK)Geo_point绘图、日志Date时间获取实例

    前言:本文源于天天是雾霾新闻,我想利用kibana画一下一线城市雾霾图,希望对想利用经纬度在kibana绘图和获取日志本身时间绘图的同学有所帮助.有什么疑问或者纠错,可以给我发邮件 一.数据准备 为了 ...

  9. 读书笔记:《HTML5开发手册》Web表单

    这是补充HTML5基础知识的第五篇内容,其他为: 一.HTML5-- 新的结构元素 二.HTML5-- figure.time.details.mark 三.HTML5-- details活学活用 四 ...

  10. mysqldump 备份直接至压缩文件,提高备份及压缩时间

    1.备份及压缩分开 备份mysqldump --single-transaction -hlocalhost --all-databases --triggers --routines --event ...