一、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 详解的更多相关文章

  1. CGGeometry.h 文件详解

    这些是在CGGeometry.h里的 CGPoint.CGSize.CGRect.CGRectEdge实际上都是结构体 struct CGPoint { CGFloat x; CGFloat y; } ...

  2. math.h库详解

    sin(double) cos(double) tan(double) 分别返回正弦,余弦,正切 #include<iostream> #include<math.h> usi ...

  3. UIKit继承结构和UIView.h文件详解

    @interface UIView : UIResponder<NSCoding, UIAppearance, UIAppearanceContainer, UIDynamicItem> ...

  4. Arduino String.h库函数详解

    此库中包含 1 charAT() 2 compareTo() 3 concat() 4 endsWith() 5 equals() 6 equalslgnoreCase() 7 getBytes() ...

  5. iOS开发CATransform3D.h属性详解和方法使用

    1.CATransform3D简介 layer有个属性transform,是CATransform3D类型.可以使其在三维界面作平移.缩放和旋转单独或组合动画! CATransform3D结构体: / ...

  6. H.264 基础及 RTP 封包详解

    转自:http://my.oschina.net/u/1431835/blog/393315 一. h264基础概念 1.NAL.Slice与frame意思及相互关系 1 frame的数据可以分为多个 ...

  7. 转:MediaCoder H.264格式编码参数设置及详解

    转: http://mediacoder.com.cn/node/81 由于现在大部分视频转码都选择H.264格式进行编码,同时CUDA编码的画质还达不到x264软编码的质量(如果你对画质无要求,可以 ...

  8. 直播一:H.264编码基础知识详解

    一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...

  9. 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. ...

随机推荐

  1. docker 用nginx 部署 node应用

    1.查询镜像 # 1.查询镜像. docker search nginx  2.拉取指定的镜像 # 2.拉取指定的镜像 docker pull nginx 3.下载完成后终端查看 # 3.下载完成后终 ...

  2. SpringCloud(一)之微服务核心组件Eureka(注册中心)的介绍和使用

    一 Eureka服务治理体系1.1 服务治理服务治理是微服务架构中最为核心和基础的模块,它主要用来实现各个微服务实例的自动化注册和发现. Spring Cloud Eureka是Spring Clou ...

  3. DeepLearningBook(中文版)书PDF

    介绍深度学历基础理论.模型和应用.(738页). 第一部分 应用数学与机器学习基础,包括深度学习需要用到的线性代数.概率与信息论.数值计算.机器学习等内容. 第二部分 深度网络:现代实践,包括深度前馈 ...

  4. 前端与后台可能需要使用交互的表单form,input标签

    前端与后台可能需要使用交互的表单标签 form表单和input标签 textarea文本域表单 select,option下拉列表表单 fieldset和legend组合表单 label标签 form ...

  5. driver.switch_to.window(driver.window_handles[0])切换到最新打开窗口

    有时,使用selenium  定位页面元素时,浏览器明明打开的是需要定位的页面,但就是定位不到元素.打印一下元素page_source,会发现源码与页面不同. 主要问题是页面没有加载完成导致,需要设置 ...

  6. Win10上的媒体断开连接错误消息(找不到ip地址)

    使用管理员权限打开命令提示符并执行以下命令: ipconfig /all 这将列出所有连接的媒体,即以太网和Wifi及其状态. 结果全部显示: 媒体断开连接 如下图: 如果是这种情况,我们需要解决互联 ...

  7. Visual Studio工具

    下载地址: https://code.visualstudio.com 插件安装: http://blog.csdn.net/u011127019/article/details/53158660 下 ...

  8. 同步pod容器内时区

    同步pod容器内时区 .直接修改镜像的时间设置,好处是应用部署时无需做特殊设置,但是需要手动构建Docker镜像. .部署应用时,单独读取主机的“/etc/localtime”文件,即创建pod时同步 ...

  9. Redis安装与配置( Windows10 )

    本文链接:https://blog.csdn.net/gaokcl/article/details/82814134linux安装参考:https://blog.csdn.net/gaokcl/art ...

  10. eNSP路由器输出 '#' 无法启动的一种解决方法

    试过网上的改virtulboxIP.关防火墙.改兼容性等方法,都不成功.后来发现通过改变选择路由器的型号可以启动. 如果对路由器没有特殊需求,可以选择型号数字较小的试一下(最低可以选择Router).