H.264码流结构解析
- 格式:pdf
- 大小:112.16 KB
- 文档页数:3
h.264详解:什么是H.264编码H.264是什么格式2009-04-24 12:53一、H.264与其他标准的比较1.1在画质上H.264概述随着市场的需求,在尽可能低的存储情况下获得好的图像质量和低带宽图像快速传输已成为视频压缩的两大难题。
为此IEO/IEC/和ITU-T两大国际标准化组织联手制定了新一代视频压缩标准H.264。
1.2在编码上H.264和以前的标准一样,也是DPCM加变换编码的混合编码模式。
但它采用“回归基本”的简洁设计,不用众多的选项,获得比MEPG-4好得多的压缩性能;H.264加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误友和丢包的处理;H.264应用目标范围较宽,可以满足不同速率、不同解析度以及不同传输(存储)场合的需求。
1.3在技术上H.264标准中有多个闪光之处,如统一的VLC符号编码,高精度、多模式的位移估计,基于4块的整数变换、分层的编码语法等。
这些措施使得H.264得算法具有很高的编码效率,在相同的重建图像质量下,能够比H.263节约50%左右的码率。
H.264的码流结构网络适应性强,增加了差错恢复能力,能够很好地适应IP和无线网络的应用。
1.4在传输上H.264能以较低的数据速率传送基于联网协议(IP)的视频流,在视频质量、压缩效率和数据包恢复丢失等方面,超越了现有的MPEG-2、MPEG-4和H.26x视频通讯标准,更适合窄带传输。
1.5在算法上MPEG-1标准视频编码部分的基本得法与H.261/H.263相似,也采用运动补偿的帧间预测、二维DCT、VLC游程编码等措施。
此外还引入了帧内帧(I)、预测帧(P)、双向预测帧(B)和直流帧(D)等概念,进一步提高了编码效率。
在MPEG-1的基础上,MPEG-2标准在提高图像分辨率、兼容数字电视等方面做了一些改进,例如它的运动适量的精度为半像素;在编码运算中(如运动估计和DCT)区分“帧”和“场”;引入了编码的可分级性技术,如空间可分级性、时间可分级性和信噪比可分级性等。
RTP协议全解(H264码流和PS流)写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析,其中借鉴了很多文章,我都列在了文章最后,在此表示感谢。
互联网的发展离不开大家的无私奉献,我决定从我做起,希望大家支持。
原创不易,转载请附上链接,谢谢/chen495810242/article/details/392073051、RTP Header解析图11) V:RTP协议的版本号,占2位,当前协议版本号为22) P:填充标志,占1位,如果P=1,则在该报文的尾部填充一个或多个额外的八位组,它们不是有效载荷的一部分。
3) X:扩展标志,占1位,如果X=1,则在RTP报头后跟有一个扩展报头4) CC:CSRC计数器,占4位,指示CSRC 标识符的个数5) M: 标记,占1位,不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。
6) PT: 有效荷载类型,占7位,用于说明RTP报文中有效载荷的类型,如GSM音频、JPEM图像等,在流媒体中大部分是用来区分音频流和视频流的,这样便于客户端进行解析。
7) 序列号:占16位,用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。
这个字段当下层的承载协议用UDP的时候,网络状况不好的时候可以用来检查丢包。
同时出现网络抖动的情况可以用来对数据进行重新排序,序列号的初始值是随机的,同时音频包和视频包的sequence是分别记数的。
8) 时戳(Timestamp):占32位,必须使用90 kHz 时钟频率。
时戳反映了该RTP报文的第一个八位组的采样时刻。
接收者使用时戳来计算延迟和延迟抖动,并进行同步控制。
9) 同步信源(SSRC)标识符:占32位,用于标识同步信源。
该标识符是随机选择的,参加同一视频会议的两个同步信源不能有相同的SSRC。
10) 特约信源(CSRC)标识符:每个CSRC标识符占32位,可以有0~15个。
H264编解码协议详解H.264编解码协议,也被称为AVC(Advanced Video Coding),是一种广泛应用于视频压缩的标准。
它是一种基于帧的压缩算法,可以将高质量的视频数据以较低的比特率传输和存储。
以下是H.264编解码协议的详细解释:1.压缩结构H.264使用了多种技术来实现高效率的视频压缩。
它使用了预测编码、变换编码和熵编码等多种技术。
预测编码通过利用帧间和帧内的冗余性,对视频进行空间和时间上的预测。
变换编码则通过对预测误差进行离散余弦变换(DCT),在频域上进行编码。
最后,熵编码使用了熵编码表将变换后的数据进行进一步的压缩。
2.帧结构H264将视频数据划分为一系列的帧,每个帧包含了许多宏块(macroblock)。
其中,关键帧(I帧)是完全独立的帧,它包含了视频的全局信息。
预测帧(P帧)和双向预测帧(B帧)则通过对前一帧和前后一帧进行预测来进行编码。
P帧只依赖前一帧,而B帧则依赖前后两帧。
这种结构可以进一步提高视频压缩的效率。
3.量化参数H.264使用量化参数对预测误差进行编码。
量化参数决定了每个预测误差值的精度,较大的量化参数会导致更高的压缩率,但也会导致较大的失真。
编码器和解码器可以通过动态调整量化参数来平衡压缩率和失真。
4.帧间预测帧间预测是H.264压缩的核心技术之一、它通过对前后帧的像素进行比较,预测当前帧的像素值。
如果在帧间没有大的运动,那么预测误差就会较小,从而达到更好的压缩效果。
帧间预测有多种模式,包括帧间直接模式(inter-direct mode)、帧间双向模式(inter-bidirect mode)和帧间skip模式(inter-skip mode)等。
5.熵编码H.264使用了基于上下文的自适应变长编码(CAVLC)和基于上下文的自适应二进制算术编码(CABAC)两种熵编码技术。
CAVLC主要用于编码量化系数和运动矢量等数据,而CABAC主要用于编码预测模式和其他语法元素。
H.264编码技术简介摘要:本文介绍了H.264编码基本概况,技术特点,并与其他标准进行了比较。
简单介绍了H.264视频编码标准的几个关键技术,并针对目前H.264在监控领域的应用做了讲解。
目录摘要: (1)一.引言 (2)二. H.264视频编码基本概况 (2)2.1 什么是H.264编码? (2)2.2 720P H.264高清成市场主流 (2)2.3 H.264 视频编码标准状况 (2)2.4 H.264 视频编码技术先进性 (3)2.5 H.264的核心竞争力是什么? (5)2.6 Main Profile (6)三、H.264与其他标准的比较 (6)3.1H.264与其他标准的比较 (6)3.2 H.264的技术特点 (8)3.2.1 分层设计 (8)3.2.2 高精度、多模式运动设计 (8)3.2.3 帧内预测功能 (8)3.2.4 4×4块的整数变换 (8)3.2.5 统一的VLC (8)3.3 H.264的主要特点 (9)四、关键技术 (10)五、H.264在监控的应用 (12)5.1 TOYA SDVR 7IV 系统简介 (12)5.2 TOYA SDVR 7IV 系统主要特点 (12)5.3 主要技术规格 (13)5.4 系统功能 (13)5.5 TOYA SDVR 7IV系统应用 (13)六、H.264的总体优缺点 (14)七、小结 (15)八、参考文献 (16)一.引言随着社会的不断进步和多媒体信息技术的发展,人们对信息的需求越来越丰富,方便、快捷、灵活地通过语音、数据、图像与视频等方式进行多媒体通信已成不可或缺的工具。
其中视觉信息给人们直观、生动的形象,因此图像与视频的传输更受到广泛的关注。
然而,视频数据具有庞大的数据量,以普通的25帧每秒,CIF格式(分辨率为352×288)的视频图像为例,一秒钟的原始视频数据速率高达3.8M字节。
不对视频信号进行压缩根本无法实时传输如此庞大的数据量,因此,视频压缩技术成为研究热点。
数字视频压缩技术H264详解一个基于分组方式的接口,打包和相应的信令属于NAL的一部分。
这样,高编码效率和网络友好性的任务分别由VCL和NAL来完成。
VCL层包括基于块的运动补偿混合编码和一些新特性。
与前面的视频编码标准一样,H.264没有把前处理和后处理等功能包括在草案中,这样可以增加标准的灵活性。
NAL负责使用下层网络的分段格式来封装数据,包括组帧、逻辑信道的信令、定时信息的利用或序列结束信号等。
例如,NAL支持视频在电路交换信道上的传输格式,支持视频在Internet上利用RTP/UDP/IP传输的格式。
NAL包括自己的头部信息、段结构信息和实际载荷信息,即上层的VCL数据。
(如果采用数据分割技术,数据可能由几个部分组成)。
(2)高精度、多模式运动估计H.264支持1/4或1/8像素精度的运动矢量。
在1/4像素精度时可使用6抽头滤波器来减少高频噪声,对于1/8像素精度的运动矢量,可使用更为复杂的8抽头的滤波器。
在进行运动估计时,编码器还可选择“增强”内插滤波器来提高预测的效果。
在H.264的运动预测中,一个宏块(MB)可以按图2被分为不同的子块,形成7种不同模式的块尺寸。
这种多模式的灵活和细致的划分,更切合图像中实际运动物体的形状,大大提高了运动估计的精确程度。
在这种方式下,在每个宏块中可以包含有1、2、4、8或16个运动矢量。
在H.264中,允许编码器使用多于一帧的先前帧用于运动估计,这就是所谓的多帧参考技术。
例如2帧或3帧刚刚编码好的参考帧,编码器将选择对每个目标宏块能给出更好的预测帧,并为每一宏块指示是哪一帧被用于预测。
(3)4某4块的整数变换H.264与先前的标准相似,对残差采用基于块的变换编码,但变换是整数操作而不是实数运算,其过程和DCT基本相似。
这种方法的优点在于:在编码器中和解码器中允许精度相同的变换和反变换,便于使用简单的定点运算方式。
也就是说,这里没有“反变换误差”。
变换的单位是4某4块,而不是以往常用的8某8块。
【知识点】H264,H265硬件编解码基础及码流分析前⾔⾳视频开发需要你懂得⾳视频中⼀些基本概念,针对编解码⽽⾔,我们必须提前懂得编解码器的⼀些特性,码流的结构,码流中⼀些重要信息如sps,pps,vps,start code以及基本的⼯作原理,⽽⼤多同学都只是⼀知半解,所以导致代码中的部分内容虽可以简单理解却不知其意,所以,在这⾥总结出了当前主流的H.264,H.265编码相关的原理,以供学习.1. 概览1.1. 为什么要编码众所周知,视频数据原始体积是巨⼤的,以720P 30fps的视频为例,⼀个像素⼤约3个字节,如下所得,每秒钟产⽣87MB,这样计算可得⼀分钟就将产⽣5.22GB。
数据量/每秒=1280*720*33*3/1024/1024=87MB因此,像这样体积重⼤的视频是⽆法在⽹络中直接传输的.⽽视频编码技术也就因运⽽⽣.关于视频编码原理的技术可以参考本⼈其他⽂章,这⾥不做过多描述.1.2. 编码技术经过很多年的开发迭代,已经有很多⼤⽜实现了视频编码技术,其中最主流的有H.264编码,以及新⼀代的H.265编码,⾕歌也开发了VP8,VP9编码技术.对移动端⽽⾔,苹果内部已经实现了如H.264,H.265编码,我们需要使⽤苹果提供的VideoToolbox框架来实现它.1.3. 编码分类软件编码(简称软编):使⽤CPU进⾏编码。
硬件编码(简称硬编):不使⽤CPU进⾏编码,使⽤显卡GPU,专⽤的DSP、FPGA、ASIC芯⽚等硬件进⾏编码。
优缺点软编:实现直接、简单,参数调整⽅便,升级易,但CPU负载重,性能较硬编码低,低码率下质量通常⽐硬编码要好⼀点。
硬编:性能⾼,低码率下通常质量低于硬编码器,但部分产品在GPU硬件平台移植了优秀的软编码算法(如X264)的,质量基本等同于软编码。
iOS系统中的硬编码苹果在iOS 8.0系统之前,没有开放系统的硬件编码解码功能,不过Mac OS系统⼀直有,被称为Video ToolBox的框架来处理硬件的编码和解码,终于在iOS 8.0后,苹果将该框架引⼊iOS系统。
H.264编码标准的分析和算法优化一、研究背景:随着社会的不断进步和多媒体信息技术的发展,人们对信息的需求越来越丰富,方便、快捷、灵活地通过语音、数据、图像与视频等方式进行多媒体通信已成不可或缺的工具。
其中视觉信息给人们直观、生动的形象,因此图像与视频的传输更受到广泛的关注。
然而,视频数据具有庞大的数据量,以普通的25帧每秒,CIF格式(分辨率为352×288)的视频图像为例,一秒钟的原始视频数据速率高达3.8M字节。
不对视频信号进行压缩根本无法实时传输如此庞大的数据量,因此,视频压缩技术成为研究热点。
随着近几年来视频图像传输领域的不断扩展,以往的标准己经难于适应不同信道的传输特征及新兴的应用环境。
为此,ISO/IEC&ITU-T共同开发了最新视频编码标准H.264/AVC。
相对以前的视频编码标准,H.264集成了许多新的视频压缩技术,具有更高的压缩效率和图像质量。
在同等的图像质量条件下,H.264的数据压缩比是应用于当前DVD系统MPEG-2的2~3倍,比MPEG-4高1.5~2倍,并且具有更好的网络友好性。
但是H.264高压缩比的代价是编码器计算复杂度大幅度地提高。
因此在保持编码效率几乎不变的同时尽可能提高编码速度是H.264/AVC视频编码标准能否得到广泛应用的关键。
在上述研究背景下,本文深入探讨了H.264/AVC标准,分析了编码器主要耗时模块的工作原理,提出三种降低H.264/AVC高计算复杂度的优化算法――快速帧内预测模式选择算法、快速帧间预测模式选择算法以及快速运动估计算法。
实验结果表明:本文所提快速算法都可大幅度地降低H.264编码器的计算复杂度,并且保持基本不变的编码效率。
二、新一代视频编码标准H.264简介:编码标准演进过程:H.261 MPEG-1 MPEG-2 H.263 MPEG-4从视频编码标准的发展历程来看,视频编码标准都有一个不断追求的目标:在尽可能低的码率(或存储容量)下获得尽可能好的图像质量。
H264(NAL简介与I帧判断)1、NAL全称Network Abstract Layer, 即⽹络抽象层。
在H.264/AVC视频编码标准中,整个系统框架被分为了两个层⾯:视频编码层⾯(VCL)和⽹络抽象层⾯(NAL)。
其中,前者负责有效表⽰视频数据的内容,⽽后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。
因此我们平时的每帧数据就是⼀个NAL单元(SPS与PPS除外)。
在实际的H264数据帧中,往往帧前⾯带有00 00 00 01 或 00 00 01分隔符,⼀般来说编码器编出的⾸帧数据为PPS与SPS,接着为I帧……如下图:2、如何判断帧类型(是图像参考帧还是I、P帧等)?NALU类型是我们判断帧类型的利器,从官⽅⽂档中得出如下图:我们还是接着看最上⾯图的码流对应的数据来层层分析,以00 00 00 01分割之后的下⼀个字节就是NALU类型,将其转为⼆进制数据后,解读顺序为从左往右算,如下:(1)第1位禁⽌位,值为1表⽰语法出错(2)第2~3位为参考级别(3)第4~8为是nal单元类型例如上⾯00000001后有67,68以及65其中0x67的⼆进制码为:0110 01114-8为00111,转为⼗进制7,参考第⼆幅图:7对应序列参数集SPS其中0x68的⼆进制码为:0110 10004-8为01000,转为⼗进制8,参考第⼆幅图:8对应图像参数集PPS其中0x65的⼆进制码为:0110 01014-8为00101,转为⼗进制5,参考第⼆幅图:5对应IDR图像中的⽚(I帧)所以判断是否为I帧的算法为:(NALU类型 & 0001 1111) = 5 即 NALU类型 & 31 = 5⽐如0x65 & 31 = 5帧格式H264帧由NALU头和NALU主体组成。
NALU头由⼀个字节组成,它的语法如下:+---------------+|0|1|2|3|4|5|6|7|+-+-+-+-+-+-+-+-+|F|NRI| Type |+---------------+F: 1个⽐特.forbidden_zero_bit. 在 H.264 规范中规定了这⼀位必须为 0.NRI: 2个⽐特.nal_ref_idc. 取00~11,似乎指⽰这个NALU的重要性,如00的NALU解码器可以丢弃它⽽不影响图像的回放,0~3,取值越⼤,表⽰当前NAL越重要,需要优先受到保护。
h264 Nalu 详解1.引言H.264的主要目标:1.高的视频压缩比2.良好的网络亲和性解决方案:VCL video coding layer 视频编码层NAL network abstraction layer 网络提取层VCL:核心算法引擎,块,宏块及片的语法级别的定义NAL:片级以上的语法级别(如序列参数集和图像参数集),同时支持以下功能:独立片解码,起始码唯一保证,SEI以及流格式编码数据传送VCL设计目标:尽可能地独立于网络的情况下进行高效的编解码NAL设计目标:根据不同的网络把数据打包成相应的格式,将VCL产生的比特字符串适配到各种各样的网络和多元环境中。
NALU头结构:NALU类型(5bit)、重要性指示位(2bit)、禁止位(1bit)。
NALU类型:1~12由H.264使用,24~31由H.264以外的应用使用。
重要性指示:标志该NAL单元用于重建时的重要性,值越大,越重要。
禁止位:网络发现NAL单元有比特错误时可设置该比特为1,以便接收方丢掉该单元。
2.NAL语法语义NAL层句法:在编码器输出的码流中,数据的基本单元是句法元素。
句法表征句法元素的组织结构。
语义阐述句法元素的具体含义。
分组都有头部,解码器可以很方便的检测出NAL的分界,依次取出NAL进行解码。
但为了节省码流,H.264没有另外在NAL的头部设立表示起始位置的句法元素。
如果编码数据是存储在介质上的,由于NAL是依次紧密相连的,解码器就无法在数据流中分辨出每个NAL的起始位置和终止位置。
解决方案:在每个NAL前添加起始码:0X000001在某些类型的介质上,为了寻址的方便,要求数据流在长度上对齐,或某个常数的整数倍。
所以在起始码前添加若干字节的0来填充。
检测NAL的开始:0X000001和0X000000我们必须考虑当NAL内部出现了0X000001和0X000000解决方案:H.264提出了“防止竞争”机制:0X000000——0X000003000X000001——0X000003010X000002——0X000003020X000003——0X00000303为此,我们可以知道:在NAL单元中,下面的三字节序列不应在任何字节对齐的位置出现0X0000000X0000010X000002Forbidden_zero_bit =0;Nal_ref_idc:表示NAL的优先级。
H.264码流结构解析
1.H.264简介
MPEG(Moving Picture Experts Group)和VCEG(Video Coding Experts Group)已经联合开发了一个比早期研发的MPEG 和H.263性能更好的视频压缩编码标准,这就是被命名为A VC(Advanced Video Coding),也被称为ITU-T H.264建议和MPEG-4的第10 部分的标准,简称为H.264/A VC或H.264。
这个国际标准已经与2003年3月正式被ITU-T所通过并在国际上正式颁布。
为适应高清视频压缩的需求,2004年又增加了FRExt部分;为适应不同码率及质量的需求,2006年又增加了可伸缩编码SVC。
2.H.264编码格式
H.263定义的码流结构是分级结构,共四层。
自上而下分别为:图像层(picturelayer)、块组层(GOB layer)、宏块层(macroblock layer)和块层(block layer)。
而与H.263相比,H.264的码流结构和H.263的有很大的区别,它采用的不再是严格的分级结构。
H.264支持4:2:0的连续或隔行视频的编码和解码。
H.264压缩与H.263、MPEG-4相比,视频压缩比提高了一倍。
H.264的功能分为两层:视频编码层(VCL, Video Coding Layer)和网络提取层(NAL, Network Abstraction Layer)。
VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。
在VCL数据传输或存储之前,这些编码的VCL数据,先被映射或封装进NAL单元中。
每个NAL单元包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组对应于视频编码的NAL头信息。
RBSP的基本结构是:在原始编码数据的后面填加了结尾比特。
一个bit“1”若干比特“0”,以便字节对齐。
图1 NAL单元序列
3.H.264传输
H.264的编码视频序列包括一系列的NAL单元,每个NAL单元包含一个RBSP,见表1。
编码片(包括数据分割片IDR片)和序列RBSP结束符被定义为VCL NAL单元,其余为NAL单元。
典型的RBSP单元序列如图2所示。
每个单元都按独立的NAL单元传送。
单元的信息头(一个字节)定义了RBSP单元的类型,NAL单元的其余部分为RBSP数据。
图2 RBSP序列举例
表1 RBSP描述
4.H.264码流结构图
层一: A. Annexb格式 B. RTP格式
图3 H.264码流分层结构
起始码:如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3字节表示,0x000001。
NAL Header:forbidden_bit,nal_reference_bit(优先级),nal_unit_type(类型)。
脱壳操作:为了使NALU主体不包括起始码,在编码时每遇到两个字节(连续)的0,就插入一字节0x03,以和起始码相区别。
解码时,则将相应的0x03删除掉。
sub_mb_pred 和mb_pred :运动补偿或者是帧内预测。
5. H.264解码
NAL
头信息的nal_referrence_idc (NRI )用于在重建过程中标记一个NAL 单元的重要性,值为0表示这个NAL 单元没有用预测,因此可以被解码器抛弃而不会有错误扩散;值高于0表示NAL 单元要用于无漂移重构,且值越高,对此NAL 单元丢失的影响越大。
NAL 头信息的隐藏比特位,在H.264编码器中默认为0,当网络识别到单元中存在比特错误时,可将其置为1。
隐藏比特位主要用于适应不同种类的网络环境(比如有线无线相结合的环境)。
图4 NAL 单元解码
NAL 单元解码的流程为:首先从NAL 单元中提取出RBSP 语法结构,然后按照如图4所示的流程处理RBSP 语法结构。
输入的是NAL 单元,输出结果是经过解码的当前图像的样值点。
NAL 单元中分别包含了序列参数集和图像参数集。
图像参数集和序列参数集在其他NAL 单元传输过程中作为参考使用,在这些数据NAL 单元的片头中,通过语法元素pic_parameter_set_id 设置它们所使用的图像参数集编号;而相应的每个图像参数集中,通过语法元素seq_paramter_set_id 设置他们使用的序列参数集编号。
6. 各分层结构的语法元素参考G50标准。