H.264 详解
一、MPEG-4说明
1、VOP视频编码技术
VO(Video Object):视频对象,它是场景中的某个物体,最简单的情况下就是矩形框,它是有生命期的,由时间上连续的许多帧构成。
VOP(Video Object Plane):视频对象平面,它可以看作是VO在某一时刻的采样,即一帧VO。
2、运动估计与运动补偿技术
I-VOP、P-VOP、B-VOP三种帧格式来表征不同的运动补偿类型。
帧内VOP(I-VOP):一个VOP与其他VOP分开编码。
预测VOP(P-VOP):VOP可以基于前一个解码后的VOP进行预测(利用运动补偿)。
双向内插VOP(B-VOP):VOP可以用过去的和未来VOP进行预测,B-VOP只能基于I-VOP和P-VOP进行插值。
二、H264说明
1、H264编码的框架分两层
VCL(Video Coding Layer):负责高效的视频内容表示
NAL(Network Abstraction Layer):负责以网络所要求的恰当的方式对数据进行打包和传送
2、重要变化
在H264中完全没有I帧、P帧、B帧、IDR帧的概念,之所以沿用这些说法是为了表明数据的编码模式。数据的组织形式从大到小排序是:序列(sequence)、图像(frame/field-picture)、片组(slice group)、片(slice)、宏块(macroblock)、块(block)、子块(sub-block)、像素(pixel)。
3、数据组织形式
片(slice):图像分成一帧(frame)或两场(field),而帧又可以分成一个或几个片(slice),片由宏块组成。宏块是编码处理的基本单元。一个slice编码之后被打包进一个NALU,NALU除了容纳slice还可以容纳其它数据,如SPS、PPS、SEI等
4、编码相关术语
NALU:H264编码数据存储或传输的基本单元,一般H264码流最开始的两个NALU是SPS和PPS,第三个NALU是IDR。SPS、PPS、SEI这三种NALU不属于帧的范畴。
SPS(Sequence Parameter Sets):序列参数集,作用于一系列连续的编码图像。
PPS(Picture Parameter Set):图像参数集,作用于编码视频序列中一个或多个独立的图像。
SEI(Supplemental enhancement information):附加增强信息,包含了视频画面定时等信息,一般放在主编码图像数据之前,在某些应用中,它可以被省略掉。
IDR(Instantaneous Decoding Refresh):即时解码刷新
HRD(Hypothetical Reference Decoder):假想码流调度器
5、帧编码模式
| 帧类型 | 描述 | 支持的框架 |
| I(Intra) | 只包含帧内预测的宏块(I) | 全部 |
| P(Predicted) | 包含帧间预测宏块(P)和I型宏块 | 全部 |
| B(Bi-Predictive) | 包含帧间双向预测宏块(B)和I型宏块 | 扩展和主 |
| SP(Switching P) | 利于在编码的比特流中切换,包括I和P宏块 | 扩展 |
| SI(Switching I) | 利用在编码的比特流中切换,包含SI宏块(一种特殊的帧内编码宏块) | 扩展 |
5.1、码流总体结构:
h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)。H.264 的编码视频序列包括一系列的NAL 单元,每个NAL 单元包含一个RBSP。一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成,其中 Start Code 用于标示这是一个NALU 单元的开始,必须是"00 00 00 01" 或"00 00 01"。
其中RBPS有分为几种类型:
NAL的解码单元的流程如下:
5.2 NAL Header:
占一个字节,由三部分组成forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)。
forbidden_bit:禁止位。
nal_reference_bit:当前NAL的优先级,值越大,该NAL越重要。
nal_unit_type :NAL类型。参见下表
几个例子:
6、H264和AVC1的差异
FOURCC AVC1:H264 bitstream without start codes
FOURCC H264:H264 bitstream with start codes
带有开始码的H264视频一般是用于无线发射、有线广播或者HD-DVD中,这些数据流的开始都有一个开始码0x000001或者0x00000001,“NALU”是NAL(网络适配层)以网络所要求的恰当方式对数据进行打包和发送的基本单元;
没有开始码的H264视频主要是存储在MP4格式的文件中,它的数据流的开始是1、2或者4个字节表示长度数据,“NALU”简单说是H264格式中的最基本的单元,是一个数据包。
三、H.264、x264、H264、AVC1区别和联系
1、H.264是MPEG4的第十部分,是一个标准。
国际上两个视频专家组(VCEG和MPEG)合作提出的标准,两个专家组各有各的叫法,所以既叫H.264,也叫AVC。
2、x264是一个编码器,他参照的标准是H.264。
H.264是需要付费的编码格式,而x264是符合H.264标准的一个开源项目,是免费的,也就是H264的一个简化版,不支持某些高级特性。但x264非常优秀,并不比H264的商业编码器差。
3、h264与AVC1都是FourCC(他俩通常在什么情况下使用呢?)
FOURCC为AVC1,没有开始码的H.264视频,主要就是用MP4或MKV等封装的文件,也就是你平时在电脑上看的那种,它的数据流开始是1、2或者4个字节表示长度数据。x264编码出来的都是这种。
FOURCC为H264,是带有开始码的H.264视频,一般是用于无线发射、有线广播或者HD-DVD中的。这些数据流的开始都有一个开始码:0x000001 或者 0x00000001。
4、如果在编码符合H.264标准的文件时,如果没有用到x264编码器,那么通常使用的是哪个编码器?(就是那个支持显卡加速的那个)
符合H.264标准的编码器,也就是H.264的商业编码器,和免费的x264了。
至于支持显卡加速的编码格式,根据显卡不同,支持的也不一样。大概也就是H264(x264/AVC1)、VC-1、MPEG-1、MPEG-2、MPEG-4、WMV3。。。当然除了H264(x264/AVC1),其他都不是H.264标准的
文章大部分引用自:
http://blog.csdn.net/alien75/article/details/38399399
http://blog.csdn.net/chenchong_219/article/details/37990541
这里有一个雷博解析H.264的源代码,大家可以下载下来看看。
http://download.csdn.net/detail/leixiaohua1020/9422409
H.264 详解的更多相关文章
- CGGeometry.h 文件详解
这些是在CGGeometry.h里的 CGPoint.CGSize.CGRect.CGRectEdge实际上都是结构体 struct CGPoint { CGFloat x; CGFloat y; } ...
- math.h库详解
sin(double) cos(double) tan(double) 分别返回正弦,余弦,正切 #include<iostream> #include<math.h> usi ...
- UIKit继承结构和UIView.h文件详解
@interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> ...
- Arduino String.h库函数详解
此库中包含 1 charAT() 2 compareTo() 3 concat() 4 endsWith() 5 equals() 6 equalslgnoreCase() 7 getBytes() ...
- iOS开发CATransform3D.h属性详解和方法使用
1.CATransform3D简介 layer有个属性transform,是CATransform3D类型.可以使其在三维界面作平移.缩放和旋转单独或组合动画! CATransform3D结构体: / ...
- H.264 基础及 RTP 封包详解
转自:http://my.oschina.net/u/1431835/blog/393315 一. h264基础概念 1.NAL.Slice与frame意思及相互关系 1 frame的数据可以分为多个 ...
- 转:MediaCoder H.264格式编码参数设置及详解
转: http://mediacoder.com.cn/node/81 由于现在大部分视频转码都选择H.264格式进行编码,同时CUDA编码的画质还达不到x264软编码的质量(如果你对画质无要求,可以 ...
- 直播一:H.264编码基础知识详解
一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...
- H.264帧结构详解
6.1.2.源码简单浏览 6.1.3.重点1:h.264帧结构6.1.4.重点2:帧结构分析软件的使用6.1.5.重点3:rtsp网络编程6.1.6.重点4:wireshark网络抓包工具的使用 6. ...
随机推荐
- RoP
RoPS特征提取 RoPS为Rotational Projection Statistics的简写,即旋转投影统计特征.RoPS特征具有对点云旋转和平移(即姿态变化)的不变性,具备很强的鉴别力以及对噪 ...
- 查看MySQL 连接信息--连接空闲时间及正在执行的SQL
MySQL 客户端与MySQL server建立连接后,就可以执行SQL语句了. 如何查看一个连接上是否正在执行SQL语句,或者连接是否处于空闲呢? 下面我们做下测试. 1.查看连接的空闲时间 首先看 ...
- mybatis之动态SQL操作之插入
1) 根据条件,插入一个学生 /** * 持久层*/ public class StudentDao { /** * 动态SQL--插入 */ public void dynaSQLwithInse ...
- js-xlsx
XLSX.read(data, {type: type}); type主要取值如下: base64: 以base64方式读取: binary: BinaryString格式(byte n is dat ...
- VBA读写XML文件
'Write XML file Sub WriteXML(fpa$, fn$) Dim xmlfile As String xmlfile = ThisWorkbook.Path & &quo ...
- C#WinForm程序显示控制台窗口Console
启动一个WINFORM项目,使用一些API函数将控制台显示出来: AllocConsole 和 FreeConsole. 本程序只在DEBUG模式下显示控制台 [DllImport("ker ...
- MongodDB基本命令
MongoDB基本命令 成功启动MongoDB后,再打开一个命令行窗口输入mongo,就可以进行数据库的一些操作. 输入help可以看到基本操作命令: show dbs:显示数据库列表 show co ...
- SVN 服务器 配置
1.目录结构 2.用户分配 3.目录权限 4.linux下的SVN服务器 5.配置svnserver.conf 注意左边不要有空格 注意文件的权限 chmod -R 777 /opt/svn/blue ...
- 2019 Unreal Open Day —— 英特尔携手 UE 助力游戏开发生态建设
2019 年 5 月 8 日-5 月 9 日,一年一度的 Unreal Open Day 虚幻引擎技术开放日在上海举办,该活动由 Epic Games 中国倾力打造,是面向虚幻引擎开发者规格最高.规模 ...
- Leetcode之动态规划(DP)专题-486. 预测赢家(Predict the Winner)
Leetcode之动态规划(DP)专题-486. 预测赢家(Predict the Winner) 给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端 ...