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. Java-继承的应用

    class array {  private int[] temp;  private int foot;  public array(int len)   //为temp数组规定大小,并开辟空间,申 ...

  2. 【C++自我精讲】基础系列一 指针与引用

    [C++自我精讲]基础系列一 指针与引用   一 前言   指针.引用.指针与引用区别. 二 指针   变量:代码中常常通过定义变量来申请并命名存储空间,并通过变量的名字来使用这段存储空间. //变量 ...

  3. 解决hexo神烦的DTraceProviderBindings MODULE_NOT_FOUND

    原文:http://kikoroc.com/2016/05/04/resolve-hexo-DTraceProviderBindings-MODULE-NOT-FOUND.html 今晚折腾hexo的 ...

  4. Hexo+NextT第三方服务调用【4】

    该系列博客列表请访问:http://www.cnblogs.com/penglei-it/category/934299.html 摘要        静态站点与动态站点有很大的不一样,它拥有一定的局 ...

  5. github 自学文档 希望可以给初学的人一些帮助

    一 .git的安装 windows下面的安装:https://git-for-windows.github.io  从这里下载完全无脑安装. 安装完成后,在开始菜单里找到"Git" ...

  6. Semaphore初探

    示例一: package com.smbea.demo.semaphore; import java.util.concurrent.ExecutorService; import java.util ...

  7. java中的instanceof

    instanceof是Java.php的一个二元操作符(运算符),和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是判断其左边对象是否为其右边类的实 ...

  8. Flexible 弹性盒子模型之CSS justify-content 属性

    实例 在弹性盒对象的 <div> 元素中的各项周围留有空白: div { display: flex; justify-content: space-around; } 复制 效果预览 浏 ...

  9. BZOJ1013 [JSOI2008]球形空间产生器sphere(高斯消元)

    1013: [JSOI2008]球形空间产生器sphere Time Limit: 1 Sec  Memory Limit: 162 MBSubmit: 4846  Solved: 2525[Subm ...

  10. linux 开启防火墙操作

    1)在/etc/sysconfig/  下新建iptables文件,添加如下代码: *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ...