x264中的帧类型、条带类型、数据分区(data partition)
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)的更多相关文章
- 将String类型的json数据转换为真正的json数据
问题 在做JavaWeb项目的时候,我们经常需要将Java对象转化为Json数据格式响应到前台页面,但是转化完成之后,看着是Json类型的数据格式,但实际上是字符串类型,在这里说两个方法将String ...
- koa 基础(十)原生node.js 在 koa 中获取表单提交的数据
1.app.js // 引入模块 const Koa = require('koa'); const router = require('koa-router')(); /*引入是实例化路由 推荐*/ ...
- 使用头文件cfloat中的符号常量获知浮点类型数据的表数范围---gyy整理
使用头文件cfloat中的符号常量获知浮点类型数据的表数范围 cfloat头文件包含了系统的浮点数的长度限制 头文件climits中的符号常量是获知整型数据的表数范围,并不能获取浮点类型数据的表数范围 ...
- java中,字符串类型的时间数据怎样转换成date类型。
将字符串类型的时间转换成date类型可以使用SimpleDateFormat来转换,具体方法如下:1.定义一个字符串类型的时间:2.创建一个SimpleDateFormat对象并设置格式:3.最后使用 ...
- C#中遍历DataTable类型并删除行数据
从数据库中读取出了DataSet类型的数据,通过dataSet.Tables[0]获得DataTable类型的数据. 这时候如果想批量修改dataTable中的内容,比如要删除dataTable中co ...
- NET中的引用类型和值类型 zt
.NET中的类型分为值类型和引用类型,他们在内存布局,分配,相等性,赋值,存储以及一些其他的特性上有很多不同,这些不同将会直接影响到我们应用程序 的效率.本文视图对.NET 基础类型中的值类型和引用类 ...
- opencv中Mat与IplImage,CVMat类型之间转换
opencv中对图像的处理是最基本的操作,一般的图像类型为IplImage类型,但是当我们对图像进行处理的时候,多数都是对像素矩阵进行处理,所以这三个类型之间的转换会对我们的工作带来便利. Mat类型 ...
- Scala 深入浅出实战经典 第81讲:Scala中List的构造是的类型约束逆变、协变、下界详解
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-97讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- Python3.x中bytes类型和str类型深入分析
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
随机推荐
- Java网络请求getInputStream异常
今天调试网络请求部分时,当getInputStream失败时直接抛出异常.解决方法时在getInputStream之前获取ResponseCode if( connection.getResponse ...
- 神经机器翻译(NMT)相关资料整理
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 1 简介 自2013年提出了神经机器翻译系统之后,神经机器翻译系统 ...
- 前端:JS获取单击按钮单元格所在行的信息
在操作表格前后端交互式时,总会遇到将所要操作的行的信息传至后台进行数据库更新的操作,本文适用于标准的html页面和js库,并提出了三种操作方式根据实际情况进行选择 1.表格格式如图所示 2.表格代码如 ...
- 删除style的样式JQuery
有些页面样式不规范,没有写在一个class里,例如:<div id="show" style="width:100px; padding-top:10px; f ...
- ES6 带来了什么
http://www.kuqin.com/shuoit/20150928/348317.html 这篇文章介绍了javascript 的大致历史 http://www.css88.com/archi ...
- 回家(洛谷 P1592)
模板题.. 传送门:codevs 1079 思路 :以 Z 为起点 直接跑一边SPFA , 看哪一头母牛距离Z点最近 , 最后找出Z 到 A~Y 的最短路 (因为仅有A~Z有奶牛) #include ...
- jquery ColorPicker 颜色选择器
$(function() { $('#colorpickerField').ColorPicker({ onSubmit: function(hsb, hex, rgb, el) { $(el).va ...
- codevs3027线段覆盖2(DP)题解
题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...
- textfile 属性
//设置textfile的Placeholder的颜色和字体大小 nameText.attributedPlaceholder = NSAttributedString.init(string: &q ...
- Mirantis OpenStack 8.0 版本
作为 OpenStack 领域标杆性企业之一的 Mirantis 在2016年3月初发布了最新的 MOS 8.0 版本.本文试着基于公开资料进行一些归纳分析. 1. 版本概况 1.1 概况 社区版本: ...