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. 简单实现TCP下的大文件高效传输

    简单实现TCP下的大文件高效传输 在TCP下进行大文件传输不象小文件那样直接打包个BUFFER发送出去,因为文件比较大所以不可能把文件读到一个BUFFER发送出去.主要有些文件的大小可能是1G,2G或 ...

  2. 典型的团队VS优秀团队

    如果做不了优秀的团队,那么就做一个典型的团队,公司需要这么一个神话,需要这么一个领头羊. 我在进入某公司后,第一个项目用的是"敏捷开发方法".而公司的理念恰恰是:开发.协作性强.扁 ...

  3. hdu-4471-Homework-矩阵快速幂+优化加速

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 题目意思: 求f(n). 当n为特殊点nk时 解题思路: 当x不为特殊点时,直接用基本的矩阵快 ...

  4. Exchange Server 2013 一步步安装图解[完全步骤截图]

    前言: 这是一份为Exchange菜鸟准备的2013版本安装文档,安装环境为Windows Server 2012 DataCenter 版本,在安装之前,我对安装Exchange也是处于一无所知的状 ...

  5. 第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma

    第一章 引言 本章主要是让我们大致明白设计模式是干嘛用的,模式分类,设计模式如何解决设计问题以及几种常见的面向对象设计中软件的复用方法. 1.什么是设计模式? 个人理解概括,设计模式是对一类问题的抽象 ...

  6. 【转载】深入Java单例模式

    原文出处:http://devbean.blog.51cto.com/448512/203501 在GoF的23种设计模式中,单例模式是比较简单的一种.然而,有时候越是简单的东西越容易出现问题.下面就 ...

  7. 使用程序控制windows service启动/停止

    1.首先加入引用: using System.ServiceProcess; 2.控制启动服务: public void Start() { var timeout = TimeSpan.FromSe ...

  8. java基础练习 2

    public class Second { /* * 打印出杨辉三角形(要求打印出10行如下图) */ public static void main(String[] args){ int i,j, ...

  9. scapy流量嗅探简单使用

    官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/index.html 参考链接:http://blog.csdn.net/Jeanphorn/ar ...

  10. [Q]“获取AutoCAD安装信息时失败...”解决方法

    “获取AutoCAD安装信息时失败...”解决方法:在“setup.exe”上右键,以管理员权限运行即可.