H264 NALU分析
NALU(Network Abstract Layer Unit)
⾳视频编码在流媒体和⽹络领域占有重要地位;流媒体编解码流程⼤致如下图所示:
H264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准⾥称为H264,在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10,⼜叫AdvancedVideo Codec,因此常常称为MPEG-4 AVC或直接叫AVC。
在⾳视频传输过程中,视频⽂件的传输是⼀个极⼤的问题;⼀段分辨率为1920 1080,每个像素点为RGB占⽤3个字节,帧率是25的视频,对于传输带宽的要求是:1920 1080 3 25/1024/1024=148315MB/s,换成bps则意味着视频每秒带宽为1186523Mbps,这样的速率对于⽹络存储是不可接受的。因此视频压缩和编码技术应运⽽⽣。
对于视频⽂件来说,视频由单张图⽚帧所组成,⽐如每秒25帧,但是图⽚帧的像素块之间存在相似性,因此视频帧图像可以进⾏图像压缩;H264采⽤了1616的分块⼤⼩对,视频帧图像进⾏相似⽐较和压缩编码。如下图所示:
H26使⽤帧内压缩和帧间压缩的⽅式提⾼编码压缩率;H264采⽤了独特的I帧、P帧和B帧策略来实现,连续帧之间的压缩;
如上图所示:
H264除了实现了对视频的压缩处理之外,为了⽅便⽹络传输,提供了对应的视频编码和分⽚策略;类似于⽹络数据封装成IP帧,在H264中将其称为组(GOP, group of pictures)、⽚(slice)、宏块(Macroblock)这些⼀起组成了H264的码流分层结构; H264将其组织成为序列(GOP)、图⽚(pictrue)、⽚(Slice)、宏块(Macroblock)、⼦块(subblock)五个层次 。
GOP (图像组)主要⽤作形容⼀个IDR帧 到下⼀个IDR帧之间的间隔了多少个帧。
H264将视频分为连续的帧进⾏传输,在连续的帧之间使⽤I帧、P帧和B帧。同时对于帧内⽽⾔,将图像分块为⽚、宏块和字块进⾏分⽚传输;通过这个过程实现对视频⽂件的压缩包装。
IDR(Instantaneous Decoding Refresh,即时解码刷新)
⼀个序列的第⼀个图像叫做 IDR 图像 ( ⽴即刷新图像 ),IDR 图像都是 I 帧图像。I和IDR帧都使⽤ 帧内预测 。I帧不⽤参考任何帧,但是之后的P帧和B帧是有可能参考这个I帧之前的帧的。
⽐如(解码的顺序):
IDR1 P4 B2 B3 P7 B5 B6 I10 B8 B9 P13 B11 B12 P16 B14 B15 这⾥的B8可以跨过I10去参考P7
原始图像: IDR1 B2 B3 P4 B5 B6 P7 B8 B9 I10
IDR1 P4 B2 B3 P7 B5 B6 IDR8 P11 B9 B10 P14 B11 B12 这⾥的B9就只能参照IDR8和P11,不可以参考 IDR8 前⾯的帧
其核⼼作⽤是,是为了解码的重同步,当解码器解码到 IDR 图像时, ⽴即将参考帧队列清空 ,将已解码的数据全部输出或抛弃,重新查找参数集,开始⼀个新的序列。这样,如果前⼀个序列出现重⼤错误,在这⾥可以获得重新同步的机会。IDR图像之后的图像永远不会使⽤IDR之前的图像的数据来解码。
下⾯是⼀个H264码流的举例(从码流的帧分析可以看出来B帧不能被当做参考帧)
GOP 指的就是两个I帧之间的间隔 ⽐较说GOP为120,如果是720 p60 的话,那就是2s⼀次I帧在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下所示:
在视频编码序列中,GOP即Group of picture(图像组) ,指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。⼀个I帧所占⽤的字节数⼤于⼀个P帧,⼀个P帧所占⽤的字节数⼤于⼀个B帧。
所以在码率不变的前提下, GOP值越⼤,P、B帧的数量会越多 ,平均每个I、P、B帧所占⽤的字节数就越多,也就更容易获取较好的图像质量;Reference越⼤,B帧的数量越多,同理也更容易获得较好的图像质量。
需要说明的是,通过提⾼GOP值来提⾼图像质量是有限度的,在遇到场景切换的情况时,H264编码器会⾃动强制插⼊⼀个I帧,此时实际的GOP值被缩短了。另⼀⽅⾯,在⼀个GOP中, P、B帧是由I帧预测得到的,当I帧的图像质量⽐较差时,会影响到⼀个GOP中后续P、B帧的图像质量,直到下⼀个GOP开始才有可能得以恢复,所以GOP值也不宜设置过⼤ 。同时,由于P、B帧的复杂度⼤于I帧,所以过多的P、B帧会影响编码效率,使编码效率降低。另外,过⻓的GOP还会影响Seek操作的响应速度,由于P、B帧是由前⾯的I或P帧预测得到的,所以Seek操作需要直接定位,解码某⼀个P或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越⻓,需要解码的预测帧就越多,seek响应的时间也越⻓。
H264原始码流(裸流)是由⼀个接⼀个NALU组成,它的功能分为两层,VCL(视频编码层)和NAL(⽹络提取层):
在VCL进⾏数据传输或存储之前,这些编码的VCL数据,被映射或封装进NAL单元。(NALU)
NALU结构单元的主体结构如下所示;⼀个原始的H264 NALU单元通常由[StartCode] [NALU Header] [NALU Payload]三部分组成,其中 Start Code ⽤于标示这是⼀个NALU 单元的开始,必须是"00 00 00 01" 或"00 00 01",除此之外基本相当于⼀个NAL header + RBSP;
(对于FFmpeg解复⽤后, MP4 ⽂件读取出来的packet是不带 startcode ,但 TS⽂件 读取出来的packet 带了startcode )
每个NAL单元是⼀个⼀定语法元素的可变⻓字节字符串,包括包含⼀个字节的头信息(⽤来表示数据类型),以及 若⼲整数字节的负荷数据 。
NALU头信息( ⼀个字节 ):
其中:
nal_unit_type:这个NALU单元的类型,1~12由H264使⽤,24~31由H264以外的应⽤使⽤
forbidden_zero_bit: 在 H264 规范中规定了这⼀位必须为 0
H264标准指出,当数据流是储存在介质上时,在每个NALU 前添加起始码:0x000001 或0x00000001,⽤来指示⼀个NALU 的起始和终⽌位置:
在这样的机制下,在码流中检测起始码,作为⼀个 NALU得 起始 标识,当检测到下⼀个起始码时,当前NALU 结束 。
3字节的 0x000001 只有⼀种场合下使⽤,就是 ⼀个完整的帧被编为多个slice(⽚)的时候 ,包含这些slice的NALU 使⽤3字节起始码。其余场合都是 4 字节 0x00000001 的。
H264有两种封装
很多解码器只⽀持annexb这种模式,因此需要将mp4做转换:在ffmpeg中⽤h264_mp4toannexb_filter可以做转换
在H264中的图像以序列为单位进⾏组织, ⼀个序列是⼀段图像编码后的数据流 ,以I帧开始, 到下⼀个I帧结束。
IDR图像:⼀个序列的第⼀个图像叫做IDR图像(⽴即刷新图像),IDR 图像都是I帧图像。 H264引⼊IDR图像是为了解码的重同步,当解码器解码到IDR图像时,⽴即将参考帧队列清 空,将已解码的数据全部输出或抛弃,重新查找参数集,开始⼀个新的序列。这样,如果前⼀个序列出现重⼤错误,在这⾥获得重新同步的机会。IDR图像之后的图像永远不会使⽤IDR之 前的图像数据来解码。
⼀个序列就是⼀段内容差别不是很⼤的图像编码后⽣成的⼀串数据流。当 运动变化⽐较少 的时 候,⼀个序列可以很⻓,因为运动变化的少就代表图像画⾯的内容变动很⼩,所以就可以编⼀ 个I帧,然后⼀直P帧、B帧了。 当运动变化多时,可能⼀个序列就⽐较短了 ,⽐如就包含⼀个I 帧和3、4个P帧。
const AVBitStreamFilter bsfilter = av_bsf_get_by_name("h264_mp4toannexb"); h264_mp4toannexb Filter
1流媒体工作站
流媒体工作站通常是高性能的微型计算机,具有较强的音视频处理能力和联网功能,其中包括从采集独立的音频、视频、文本直到编辑合成内容丰富的流媒体文件的系列软硬件工具。
除了高性能计算机所具备的软硬件外,专业级摄像机、高性能采集卡和功能强大的流媒体压缩编码软件是专业流媒体工作站的核心设备。摄像机负责采集音视频信息;采集卡将音视频信息输入计算机;压缩编码软件负责将音视频采集卡传送过来的多媒体信息进行压缩,另外加入一些附加信息把音视频文件转换成适合流式传输的格式。如果做直播,流媒体压缩编码软件还负责实时地将压缩好的流媒体信号上传给流媒体服务器。
2流媒体服务器
流媒体服务器是流媒体系统的核心,其性能直接决定着流媒体系统的总体性能。为了能够适应高并发、实时性、连续稳定的流式服务,流媒体服务器的计算能力要强、存储量要大,要具备接收控制、请求处理、数据检索、按流传送等多种功能。
讯维的流媒体服务器硬件方面都配备高性能的多核CPU,采用磁盘阵列等大容量的存储设备,为了减少服务器负载,提高响应速度,还会采用缓冲池技术。软件方面除了要实现对媒体资源、节目内容和传输方式的管理外,还要考虑到了对认证用户的授权管理和对数字资源的版权保护等。
H264是一种高度压缩的数字视频,常用于监控视频,它可以由VLC、5Kplayer、Potplayer、暴风影音和Mplayer软件播放。
1.VLC播放器:支持windows、MaC、Linux、BSD、Beos、Solaris、QNX、IOS平台,可播放现有非加密视频的所有格式。它是第一个在Win/Lin/Mac平台上实现硬件加速的播放器。即使在硬件加速之前,VLC的性能也得到了改善。
2.Mplayer播放器:Mplayer播放器是一个非常实用的计算机端视频播放工具。Mplayer播放器支持大部分视频格式文件,可以为用户提供最佳的视频播放体验、高度还原的图像质量和音质,支持视频文件的最佳播放级别。
3.Potplayer:Potplayer软件配有专业的编解码器,方便快捷。安装后,可以观看任何格式的视频文件。.Potplayer启动速度快,回放稳定,支持视频字幕。其次,potplayer支持32位和64位系统,内置硬件加快解码速度。
4.5kplayer:5kplayer支持MKV/TS/M2TS/AVI/flv/RM/RMVB/VOB/ISO/SWF等格式。该软件专为4K/5K**设计,提供多字幕、画面旋转反转、音画面同步、曲目选择等功能,方便播放各类**和流媒体视。
5.暴风影音:暴风影音是世界领先的媒体播放器。暴风影音致力于为用户带来更快的播放体验和视觉效果。新版本的暴风影音优化了解码方案,支持多种视频格式,包括MPEG4、flv和WMV。
-VLC
-Mplayer
-PotPlayer
-暴风影音
rtsp://18472239149/vod/mp4://BigBuckBunny_175kmov
rtsp://admin:555a2301@192168169:554/h264/ch1/main/av_stream
http://1921681161:8080/hls/v1/token1/hlsm3u8
http://devimagesapplecomedgekeynet/streaming/examples/bipbop_4x3/gear2/prog_indexm3u8
H264 是MPEG-4 标准所定义的最新,同时也是技术含量最高、代表最新技术水平的视频编码格式之一。 H264 最具价值的部分无疑是更高的数据压缩比。在同等的图像质量条件下,H264 的数据压缩比能比当前 DVD 系统中使用的 MPEG-2 高2-3 倍,比MPEG-4 高15-2 倍。正因为如此,经过H264 压缩的视频数据, 在网络传输过程中所需要的带宽更少,也更加经济。在 MPEG-2 需要6Mbps 的传输速率匹配时,H264 只需 要1Mbps-2Mbps 的传输速率。 与MPEG-4 一样,经过H264 压缩的视频文件一般也是采用avi 作为其后缀名,同样不容易辨认,只能通过解码器来自己识别
H264 与MPEG4 区别 压缩方式是DVR 的核心技术,压缩方式很大程度上决定着图像的质量、压缩比、 传输效率、传输速度等性能,它是评价DVR 性能优劣的重要一环。 随着多媒体 技术的发展,相继推出了许多压缩编码标准,目前主要有JPEG/M-JPEG、 H261/H263 和MPEG 等标准。 1、JPEG/M-JPEG ①、JPEG 是一种静止图像的压缩标准,它是一种标准的帧内压缩编码方 式。当硬件处理速度足够快时,JPEG 能用于实时动图像的视频压缩。在画面变 动较小的情况下能提供相当不错的图像质量,传输速度快,使用相当安全,缺点 是数据量较大。 ②、M-JPEG 源于JPEG 压缩技术,是一种简单的帧内JPEG 压缩,压缩 图像质量较好,在画面变动情况下无马赛克,但是由于这种压缩本身技术限制, 无法做到大比例压缩,录像时每小时约1-2GB 空间,网络传输时需要2M带宽, 所以无论录像或网络发送传输,都将耗费大量的硬盘容量和带宽,不适合长时间 连续录像的需求,不大实用于视频图像的网络传输。 2、H261/H263 ①、H261 标准通常称为P64,H261 对全色彩、实时传输动图像可以达 到较高的压缩比,算法由帧内压缩加前后帧间压缩编码组合而成,以提供视频压 缩和解压缩的快速处理。由于在帧间压缩算法中只预测到后1 帧,所以在延续时 间上比较有优势,但图像质量难以做到很高的清晰度,无法实现大压缩比和变速 率录像等。 ②、H263 的基本编码方法与H261 是相同的,均为混合编码方法,但H263 为适应极低码率的传输,在编码的各个环节上作了改进,如以省码字来提高编码 图像的质量,此外, H263 还吸取了MPEG 的双向运动预测等措施,进一步提 高帧间编码的预测精度,一般说,在低码率时,采用H263 只要一半的速率可 获得和H261 相当的图像质量。 3、MPEG MPEG 是压缩运动图像及其伴音的视音频编码标准,它采用了帧间压缩, 仅存储连续帧之间有差别的地方 ,从而达到较大的压缩比。MPEG 现有 MPEG—1、MPEG—2 和MPEG—4 三个版本,以适应于不同带宽和图像质量 的要求。 ①、MPEG—1 的视频压缩算法依赖于两个基本技术,一是基于1616(像 素行)块的运动补偿,二是基于变换域的压缩技术来减少空域冗余度,压缩比 相比M-JPEG 要高,对运动不激烈的视频信号可获得较好的图像质量,但当运 动激烈时,图像会产生马赛克现象。 MPEG-1 以15Mbps 的数据率传输视音频 信号,MPEG-1 在视频图像质量方面相当于VHS 录像机的图像质量,视频录像 的清晰度的彩色模式≥240TVL,两路立体声伴音的质量接近CD 的声音质 量。 MPEG-1 是前后帧多帧预测的压缩算法,具有很大的压缩灵活性,能变速 率压缩视频,可视不同的录像环境,设置不同的压缩质量,从每小时 80MB 至 400MB 不等,但数据量和带宽还是比较大。 ②、MPEG-2 它是获得更高分辨率(720572)提供广播级的视音频编码标 准。MPEG-2 作为MPEG-1 的兼容扩展,它支持隔行扫描的视频格式和许多高 级性能包括支持多层次的可调视频编码,适合多种质量如多种速率和多种分辨率 的场合。它适用于运动变化较大,要求图像质量很高的实时图像。对每秒30 帧、 720572 分辨率的视频信号进行压缩,数据率可达3-10Mbps。由于数据量太大, 不适合长时间连续录像的需求。 ③、MPEG-4 是为移动通信设备在Internet 网实时传输视音频信号而制定的 低速率、高压缩比的视音频编码标准。 MPEG-4 标准是面向对象的压缩方式, 不是像MPEG-1 和MPEG-2 那样简单地将图像分为一些像块,而是根据图像的 内容,其中的对象(物体、人物、背景)分离出来,分别进行帧内、帧间编码, 并允许在不同的对象之间灵活分配码率,对重要的对象分配较多的字节,对次要 的对象分配较少的字节,从而大大提高了压缩比,在较低的码率下获得较好的效 果, MPEG-4 支持MPEG-1、MPEG-2 中大多数功能,提供不同的视频标准源 格式、码率、帧频下矩形图形图像的有效编码。 总之,MPEG-4 有三个方面的优势: ①、具有很好的兼容性; ②、MPEG-4 比其他算法提供更好的压缩比,最高达200:1; ③、MPEG-4 在提供高压缩比的同时,对数据的损失很小。所以,MPEG-4 的应用能大幅度的降低录像存储容量,获得较高的录像清晰度,特别适用于长时 间实时录像的需求,同时具备在低带宽上优良的网络传输能力。 H264 是ITU-T 的VCEG(视频编码专家组)和ISO/IEC 的MPEG(活动图像 编码专家组)的联合视频组(JVT:joint video team)开发的一个新的数字视频 编码标准,它既是ITU-T 的H264,又是ISO/IEC 的MPEG-4 的第10 部分。 1998 年1 月份开始草案征集, 1999 年9 月,完成第一个草案,2001 年5 月制 定了其测试模式TML-8,2002 年6 月的 JVT 第5 次会议通过了H264 的FCD 板。目前该标准还在开发之中,预计明年上半年可正式通过。 H264 和以前的标准一样,也是DPCM加变换编码的混合编码模式。但它 采用“回归基本”的简洁设计,不用众多的选项,获得比H263++好得多的压缩性 能;加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误 码和丢包的处理;应用目标范围较宽,以满足不同速率、不同解析度以及不同传 输(存储)场合的需求;它的基本系统是开放的,使用无需版权。 在技术上, H264 标准中有多个闪光之处,如统一的VLC 符号编码,高精 度、多模式的位移估计,基于4×4 块的整数变换、分层的编码语法等。这些措 施使得 H264 算法具有很的高编码效率,在相同的重建图像质量下,能够比 H263 节约50%左右的码率。H264 的码流结构网络适应性强,增加了差错恢 复能力,能够很好地适应IP 和无线网络的应用。 其实现在多数的什么H264 都是H263++通过改进后的算法,是压缩率变的小 了点(包括现在有个别的生产厂家,我同事都看到过他们的源代码)!如果是从 单个画面清晰度比较,MPEG4 有优势;从动作连贯性上的清晰度,H264 有优 势!
0条评论