H264 视频文件 帧格式 传输封装等 杂碎
H264编解码协议详解

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主要用于编码预测模式和其他语法元素。
数字视频压缩技术H264详解

数字视频压缩技术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块。
音视频流媒体常见视频文件的编码方式和封装格式介绍汇总

⾳视频流媒体常见视频⽂件的编码⽅式和封装格式介绍汇总常见的AVI、RMVB、MKV、ASF、WMV、MP4、3GP、FLV等⽂件其实只能算是⼀种封装标准。
⼀个完整的视频⽂件是由⾳频和视频2部分组成的。
H264、Xvid等就是视频编码格式,MP3、AAC等就是⾳频编码格式。
例如:将⼀个Xvid视频编码⽂件和⼀个MP3视频编码⽂件按AVI封装标准封装以后,就得到⼀个AVI后缀的视频⽂件,这个就是我们常见的AVI视频⽂件了。
由于很多种视频编码⽂件、⾳频编码⽂件都符合AVI封装要求,则意味着即使是AVI后缀,也可能⾥⾯的具体编码格式不同。
因此出现在⼀些设备上,同是AVI后缀⽂件,⼀些能正常播放,还有⼀些就⽆法播放。
同样的情况也存在于其他容器格式。
即使RMVB、WMV等也不例外。
部分技术先进的容器还可以同时封装多个视频、⾳频编码⽂件,甚⾄同时封装进字幕,如MKV封装格式。
MKV⽂件可以做到⼀个⽂件包括多语种发⾳、多语种字幕,适合不同⼈的需要。
例如:MKV⽂件只要制作的时候同时加⼊国语和粤语发⾳的⾳轨和对应的简体、繁体字幕,播放的时候,你可以独⽴选择国语或粤语发⾳,并根据⾃⼰需要选择简体或繁体字幕,也可以选择不显⽰字幕。
相当⽅便。
因此,视频转换需要设置的本质就是:A设置需要的视频编码、B设置需要的⾳频编码、C选择需要的容器封装。
⼀个完整的视频转换设置都⾄少包括了上⾯3个步骤。
常⽤的有Xvid,H264,MPEG1,MPEG2。
Xvid:与RMVB格式差不多的压缩率,通⽤性很强,特别是⽤于家⽤DVD和便携式MP4等设备。
H264:⾯前压缩率最⾼的视频压缩格式,与其他编码格式相⽐,同等画⾯质量,⽂件体积最⼩,远远超过RMVB编码格式,电脑都可以播放,部分便携式视频设备也⽀持,如苹果播放器。
PDA/PPC等设备也可以使⽤。
MPEG1:其实就是VCD编码格式。
MPEG2:DVD编码格式。
⽐MPEG1强,与MPEG1⼀样,已经落后的编码格式,压缩率都不⾼,编码后的⽂件体积⼤,多⽤于希望把⽹上下载的⽂件转换为VCD或DVD碟的时候。
H.264详解

H.264详解H.264,同时也是MPEG-4第十部分,是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。
H.264基本概况随着HDTV的兴起,H.264这个规范频频出现在我们眼前,HD-DVD和蓝光均计划采用这一标准进行节目制作。
而且自2005年下半年以来,无论是NVIDIA还是ATI都把支持H.264硬件解码加速作为自己最值得夸耀的视频技术。
H.264到底是何方“神圣”呢?H.264是一种高性能的视频编解码技术。
目前国际上制定视频编解码技术的组织有两个,一个是“国际电联(ITU-T)”,它制定的标准有H.261、H.263、H.263+等,另一个是“国际标准化组织(ISO)”它制定的标准有MPEG-1、MPEG-2、MPEG-4等。
而H.264则是由两个组织联合组建的联合视频组(JVT)共同制定的新数字视频编码标准,所以它既是ITU-T的H.264,又是ISO/IEC的MPEG-4高级视频编码(Advanced Video Coding,AVC),而且它将成为MPEG-4标准的第10部分。
因此,不论是MPEG-4 AVC、MPEG-4 Part 10,还是ISO/IEC 14496-10,都是指H.264。
H.264最大的优势是具有很高的数据压缩比率,在同等图像质量的条件下,H.264的压缩比是MPEG-2的2倍以上,是MPEG-4的1.5~2倍。
举个例子,原始文件的大小如果为88GB,采用MPEG-2压缩标准压缩后变成3.5GB,压缩比为25∶1,而采用H.264压缩标准压缩后变为879MB,从88GB到879MB,H.264的压缩比达到惊人的102∶1!H.264为什么有那么高的压缩比?低码率(Low Bit Rate)起了重要的作用,和MPEG-2和MPEG-4 ASP等压缩技术相比,H.264压缩技术将大大节省用户的下载时间和数据流量收费。
H264媒体和数据传输介绍

H264媒体简单说明一、H264简介H264分层结构由五层组成:序列参数集(sps)图像参数集(pps)片(slice)宏块、子块其中后面层应用前面层(或则说从属关系);其中序列的第一个帧叫做IDR帧,用于清空参考帧队列,避免错误累积。
H264 nalu包RTP传输一般分为三种情况:单一nalu模式,一般nalu<mtu组合封包模式,多个nalu组成一个RTP包分片封包模式,一般nalu>mtu依据不同帧的情况来实现不同打包,代码可参考NALU打包demo二、H264的文件存储和传输区别H264的文件存储:每一个NALU包前都会多一个00 00 01 or 00 00 00 01的起始头,作为NALU包之间的分隔标识;并通过给非起始头的00 00后插入0x03来避免标识冲突。
取数据后,起始头需要丢掉,0x03数据也需要去除。
H264的文件传输:NALU包属于传输包的自然分割,不需要加起始头。
包格式一般是:x串+h264nalu头+h264data比如RTP传输,x串往往就是RTP头(一般12字节)三、H264和MP4关系是ITU-T与ISO/IEC两个组织联合进行开发的视频编解码方案。
ITU-T命名为H264ISO/IEC命名为MPEG-4 A VC是MPEG-4标准的第10部分其中标准H264格式的文件存储不是国际标准格式相关传输协议简单说明(本次使用到)一、RTP/RTCP、RTSP、SIP等RTP/RTCP是传输层的传输和控制协议,是一个传输子层,运行在TCP/UDP之上RTSP/SIP是更上一层的传输协议SIP运行在RTP之上RTSP直接在TCP/UDP上运行二、RTP包头音频和视频采用不同端口,初期先考虑仅H264视频三、RTCP在RTP会话期间,各参与者周期性地传送RTCP包,包中含有已发送的数据包的数量、丢失的数据包的数量等统计资料。
分为五类:200 SR 发送端报告主要考虑201 RR 接收端报告202 SDES 源点描述203 BYE 结束传输204 APP 特定应用SR主要包括:相应的RTP流的SSRC(丢失率、累计丢包数、接收抖动、上次SR以来的延时等)、RTP流中最新产生的RTP分组时间戳和NTP、RTP流包含的分组数、字节数。
H.264标准(一)mp4封装格式详解

H.264标准(⼀)mp4封装格式详解在⽹络层,互联⽹提供所有应⽤程序都要使⽤的两种类型的服务,尽管⽬前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: ⽆连接分组交付服务(Connectionless Packet Delivery Service) ⽆连接交付抽象地表⽰⼤多数分组交换⽹络都能提供的⼀种服务。
简单地讲,指的是TCP/IP灰暗⽹按照报⽂上携带的地址信息把短报⽂从⼀台机器传递到另⼀台机制。
因为⽆连接服务单独传递每个分组,所以不能保证可靠、有序地传递。
⽽且,由于⽆连接服务通常直接映射到底层的硬件上,所以⾮常有效。
更重要的是,有了⽆连接分组交换作为互联⽹服务的基础,使得TCP/IP协议协议可以适应多种⽹络硬件。
可靠的数据流传输服务(Reliable Stream Transport Service) ⼤多数应⽤程序要求得到⽐分组交换更多的服务,因为它们要求通信软件能够从传输错误、分组丢失或发送者与接受着之间路径上的交换机的故障中⾃动恢复过来。
可靠的传输服务处理了这些问题。
它允许⼀台计算机上的应⽤程序与另⼀台计算机上的应⽤程序之间建⽴⼀个"连接",然后通过该链接发送⼤量数据,就像这是⼀个永久的直接硬件连接。
当然,在底层,通信协议把数据流分成⼀个个⼩报⽂来发送它们,⼀次⼀个,同时等待接受这发送确认接收的信息。
⽆连接交付系统最基本的互联⽹服务由⼀个分组交付系统组成。
从技术⾓度来讲,该服务被定义为不可靠的、尽最⼤努⼒交付的、⽆连接分组交付系统,类似于由运⾏在尽最⼤努⼒交付模式的⽹络硬件所提供的服务。
这种服务是不可靠的(unreliable),因为不能保证交付。
分组可能丢失、重复、延迟或不按序交付等,但服务不检测这种情况,也不提醒发送⽅和接收⽅。
服务是⽆连接的(connectionless),因为每⼀个分组都被独⽴对待。
从⼀台计算机发送到另⼀台上的分组序列,可能经过不同的传输路径,或者有的丢失有的到达。
H.264码流结构解析

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的基本结构是:在原始编码数据的后若干比特0”,以便字节对齐。
面填加了结尾比特。
一个bit“1”“图1 NAL单元序列3.H.264传输H.264的编码视频序列包括一系列的NAL单元,每个NAL单元包含一个RBSP,见表1。
H264编码+打包+解码相关知识

H264编码+打包+解码相关知识1)ES流(Elementary Stream): 也叫基本码流,包含视频、音频或数据的连续码流.2)PES流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PES流.3)TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PAT和PMT表,(在MPEG-2系统中,由视频, 音频的ES流和辅助数据复接生成的用于实际传输的标准信息流称为MPEG-2传送流)封装 : 就是捆绑打包, 将画面视频文件和音轨文件打包在一起, 并按照一定规则建立排序和索引, 便于播放器或播放软件来索引播放. 包括AVI / PS(Program Stream)/ TS(Transport Stream)/ MKV (Matroska)等。
4)I frame :帧内编码帧又称intra picture,I帧通常是每个GOP(MPEG所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。
I帧可以看成是一个图像经过压缩后的产物。
5)P frame:前向预测编码帧又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;6)B frame:双向预测内插编码帧又称bi-directional interpolated predictionframe,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;7)PTS:PresentationTime Stamp。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
rfc3984Standards Track [Page 2] RFC 3984 RTP Payload Format for H.264 Video February 2005 1.按照RFC3984协议实现H264视频流媒体nalu单元包起始0x 00 00 00 01H.264 NAL格式及分析器/zsw%5Fdavy/b ... c409cc7cd92ace.html/zsw_davy/blo ... 081312c8fc7acc.html----------------------------------比特流信息----------------------------------------------①NALU(Network Abstract Layer Unit):两标准中的比特流都是以NAL为单位,每个NAL 单元包含一个RBSP,NALU的头信息定义了RBSP所属类型。
类型一般包括序列参数集(SPS)、图像参数集(PPS)、增强信息(SEI)、条带(Slice)等,其中,SPS和PPS 属于参数集,两标准采用参数集机制是为了将一些主要的序列、图像参数(解码图像尺寸、片组数、参考帧数、量化和滤波参数标记等)与其他参数分离,通过解码器先解码出来。
此外,为了增强图像的清晰度,AVS-M添加了图像头(Picture head)信息。
读取NALU流程中,每个NALU前有一个起始码0x000001,为防止内部0x000001序列竞争,H.264编码器在最后一字节前插入一个新的字节——0x03,所以解码器检测到该序列时,需将0x03删掉,而AVS-M只需识别出起始码0x000001。
②读取宏块类型(mb type)和宏块编码模板(cbp):编解码图像以宏块划分,一个宏块由一个16*16亮度块和相应的一个8*8cb和一个8*8cr色度块组成。
(a) 两标准的帧内、帧间预测时宏块的划分是有区别的。
H.264中,I_slice亮度块有Intra_4*4和Intra_16*16两种模式,色度块只有8*8模式;P_slice宏块分为16*16、16*8、8*16、8*8、8*4、4*8、4*4共7种模式。
而AVS-M中,I_slice亮度块有I_4*4和I_Direct两模式,P_slice时宏块的划分和H.264中的划分一致。
(b) 两标准的宏块cbp值计算也不相同。
H.264中,Intra_16*16宏块的亮度(色度)cbp直接通过读mb type得到;非Intra_16*16宏块的亮度cbp=coded_block_pattern%16,色度cbp=coded_block_pattern/16 。
其中,亮度cbp最低4位有效,每位决定对应宏块的残差系数能不能为0;色度cbp为0时,对应残差系数为0,cbp为1时,DC残差系数不为0,AC系数为0,cbp为2时,DC、AC残差系数都不为0。
AVS-M中,当宏块类型不是P_skip时,直接从码流中得到cbp的索引值,并以此索引值查表得到codenum值,再以codenum查表分别得到帧内/帧间cbp。
此cbp为6位,每位代表宏块按8*8划分时能不能包含非零系数,当变换系数不为0时,需进一步读cbp_4*4中每位值来判断一个8*8块中4个4*4块的系数能不能为0。
---------------------------------------------------------------------------------------------总的来说H264的码流的打包方式有两种,一种为annex-b byte stream format的格式,这个是绝大部分编码器的默认输出格式,就是每个帧的开头的3~4个字节是H264的start_code,0x00000001或者0x000001。
另一种是原始的NAL打包格式,就是开始的若干字节(1,2,4字节)是NAL的长度,而不是start_code,此时必须借助某个全局的数据来获得编码器的profile,level,PPS,SPS等信息才可以解码。
----------------------------------------------------------------------------AVC vs. H.264AVC and H.264 are synonymous. The standard is known by the full names "ISO/IEC 14496-10" and "ITU-T Recommendation H.264". In addition, a number of alternate names are used (or have been) in reference to this standard. These include:∙MPEG-4 part 10∙MPEG-4 AVC∙AVC∙MPEG-4 (in the broadcasting world MPEG4 part 2 is ignored)∙H.264∙JVT (Joint Video Team, nowadays rarely used referring to actual spec)∙H.26L (early drafts went by this name)All of the above (and those I've missed) include the Annex B byte-stream format. Unlike earlier MPEG1/2/4 and H.26x codecs, the H.264 specification proper does not define a full bit-stream syntax. It describes a number of NAL (Network Abstraction Layer) units, a sequence of which can be decoded into video frames. These NAL units have no boundarymarkers, and rely on some unspecified format to provide framing.Annex B of of the document specifies one such format, which wraps NAL units in a format resembling a traditional MPEG video elementary stream, thus making it suitable for use with containers like MPEG PS/TS unable to provide the required framing. Other formats, such as ISO base media based formats, are able to properly separate the NAL units and do not need the Annex B wrapping.The H.264 spec suffers from a deficiency. It defines several header-type NAL units (SPS and PPS) without specifying how to pack them into the single codec data field available in most containers. Fortunately, most containers seem to have adopted the packing used by the ISO format known as MP4.1. H.264起始码在网络传输h264数据时,一个UDP包就是一个NALU,解码器可以很方便的检测出NAL 分界和解码。
但是如果编码数据存储为一个文件,原来的解码器将无法从数据流中分别出每个NAL的起始位置和终止位置,为此h.264用起始码来解决这一问题。
H.264编码时,在每个NAL前添加起始码0x000001,解码器在码流中检测到起始码,当前NAL结束。
为了防止NAL内部出现0x000001的数据,h.264又提出'防止竞争emulation prevention"机制,在编码完一个NAL时,如果检测出有连续两个0x00字节,就在后面插入一个0x03。
当解码器在NAL内部检测到0x000003的数据,就把0x03抛弃,恢复原始数据。
0x000000 >>>>>> 0x000003000x000001 >>>>>> 0x000003010x000002 >>>>>> 0x000003020x000003 >>>>>> 0x00000303附上h.264解码nalu中检测起始码的算法流程for(;;){if next 24 bits are 0x000001{startCodeFound = truebreak;}else{flush 8 bits}}// for(;;)if(true == startCodeFound){//startcode found// Flush the start code foundflush 24 bits//Now navigate up to next start code and put the in between stuff // in the nal structure.for(;;){get next 24 bits & check if it equals to 0x000001if(false == (next 24 bits == 000001)){// search for pattern 0x000000check if next 24 bits are 0x000000if(false == result){// copy the byte into the buffercopy one byte to the Nal unit}else{break;}}else{break;}}//for(;;)}2. MPEG4起始码MPEG4的特色是VOP,没有NALU的概念,仍使用startcode对每帧进行分界。