H264和H265的nalu介绍

H264和H265的nalu介绍,第1张

本篇介绍下H264和H264的编码格式,包括avcc,annexb,以及转换方法。annexb 用于实时流的场景,avcc用于多媒体文件,如mp4,mkv等场景。

h264是一种编码格式,NAL(Network Abstraction Layer)和VCL(Video Coding Layer)是其中2个主要内容。NAL是网络抽象层,用于对数据进行打包和发送。VCL是视频编码层,负责高效地视频内容显示。

H264编码过程中的3种数据:

SODB(string of data byte),数据比特流,最原始的编码数据,也就是VCL数据,没有附加其他数据。

RBSP(Raw byte sequence payload),原始字节序列载荷,在SODB的后面加入了结尾比特。

EBSP(Encapsulation Byte Sequence Packets)扩展字节序列载荷,在RBSP的基础上添加了仿校验字节(0x03),这是因为视频数据以annexb格式出现时,会有起始码(Start Code)0x00000001, 如果数解码器发现Start Code 就会认为是当前NAL结束,新的NAL开始。如果NAL数据中也有0x00000001数据,那么就会出现误判,因此需要添加仿校验字节,如果编码器发现连续2个字节为0,那么就会添加0x03,在解码的时候再把0x03去掉。

VCL层是对块,宏块以及片语法级别的定义,最终输出压缩编码后的数据SODB。 VAL在存储和传输前会对SODB打包成RBSP,并添加NAL头,组成一个NALU单元。

每个NALU包含一字节的头信息,再加可变长度的RBSP。每个NALU可以携带一个编码片,A/B/C型数据分割,或者是一个序列参数集,或者是一个图像参数集。

nalu头结构大小是1字节,具体可以参考 rfc3984

+---------------+

|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+

|F|NRI| Type |

+---------------+

F:

forbidden_bit:初始为0,当网络发现NAL有网络错误时将该比特设置为1

NRI:

nal_reference_bit:nal重要性指示,值越大,重要性越高,当解码器处理不过来的时候,可以丢弃值为0的nalu。

Type:

nal_unit_type:标识NAL单元中的RBSP数据类型,其中值为1,2,3,4,5的nal单元成为VCL的nal单元,其余为非VCL的nal单元。

序列参数集SPS:

两个IDR帧之间的图形序列所有信息,包括标识符(seq_parameter_set_id),帧数,POC的数目,参考帧的数目,解码图像尺寸,帧场编码模式选择标识等

图像参数集PPS:

PPS对应的是一个序列中的某一幅或某几幅图像,包括一个图像所有的Slice的相关信息,如图像类型,序列号,标识符,可选的序列标识符,熵编码模式选择标识,片组数目,初始化编码参数,去方块滤波系数调整标识等

数据分割:

组成片的编码数据存放在3个独立的数据分割中,分割A包含片头和片中每个宏块头数据,分割B包含帧内和SI片的宏块编码数据,分割C包含帧间的编码残差数据

H264的AnnexB格式:

使用startcode来分割nal,startcode一般是3字节(0x000001)或4字节(0x00000001),sps,pps也在nal数据头部。

找一个mp4 文件,执行下面命令

这时候就可以看到对应的annexb数据:

H264的AVCC格式

在头部保存长度信息,并将长度信息所用的字节长度和sps,pps等数据放到extradata中。

可以使用如下命令查看mp4中的avcc数据包:

H265的nalu结构如下

+---------------+---------------+

|0|1|2|3|4|5|6|7|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

|F| Type| LayerId | TID |

+-------------+-----------------+

这时候nalu 头是2字节

F:

forbidden_zero_bit:要求是0,当出现错误的时候设置为1

Type:

nal_unit_type:nalu类型,具体数值如下, 和H264是不一样的:

LayerId:

nuh_layer_id:现在需要设置为0,是为后续的3D图像准备的。

TID:

nuh_temporal_id_plus1:NALU 的标识符,类似于H264的NRI。

H.265是ITU-T VCEG 继H.264之后所制定的新的视频编码标准。H.265标准围绕着现有的视频编码标准H.264(视频编码标准是主要应用于实时视频通信领域,如会议电视MPEG系列标准是由ISO/IEC制定的,主要应用于视频存储(DVD)、广播电视、因特网或无线网上的流媒体等。),保留原来的某些技术,同时对一些相关的技术加以改进。新技术使用先进的技术用以改善码流、编码质量、延时和算法复杂度之间的关系,达到最优化设置。具体的研究内容包括:提高压缩效率、提高鲁棒性和错误恢复能力、减少实时的时延、减少信道获取时间和随机接入时延、降低复杂度等。H264由于算法优化,可以低于1Mbps的速度实现标清数字图像传送H265则可以实现利用1~2Mbps的传输速度传送720P(分辨率1280*720)普通高清音视频传送。

2012年8月,出了首款H.265编解码器,而在仅仅六个月之后,国际电联(ITU)就正式批准通过了HEVC/H.265标准,标准全称为高效视频编码(High Efficiency Video Coding),相较于之前的H.264标准有了相当大的改善,中国华为公司拥有最多的核心专利,是该标准的主导者。

H.265旨在在有限带宽下传输更高质量的网络视频,仅需原先的一半带宽即可播放相同质量的视频。这也意味着,我们的智能手机、平板机等移动设备将能够直接在线播放1080p的全高清视频。H.265标准也同时支持4K(4096×2160)和8K(8192×4320)超高清视频。可以说,H.265标准让网络视频跟上了显示屏"高分辨率化"的脚步。

4K h.265编码器配置

一、设备安装与连接

连接电源和视频信号,连接模拟音频信号,连接网络。

二、设备登录和网络配置

登录WEB编码器管理界面,在界面里面进行网络配置,设置在同一个网段里。

三、功能配置和调节

配置好网络后,进行视频源的调节,比方说视频的音量调节,视频码率,帧率都可以自定义设置。

四、添加媒体流地址

然后在编码器主页里H.264主码流位置,添加流服务,把要推流到哪个直播平台,推流地址进行复制粘贴到编码器后台中。点击设置后视频画面就正在推流过程中。

千视(kiloview)4K编码器3G-SDI和4K P30 HDMI双输入接口,支持二选一编码。

编码器主码率支持高达1080p60Hz的视频编码,子码流最高支持720p60Hz的视频编码。主、子码流均可同时开启8个流服务(最多可推送16个直播平台);

如果需要横屏转竖屏,可以在编码器后台进行旋转和裁切功能;


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/454309.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-06-02
下一篇2023-06-02

发表评论

登录后才能评论

评论列表(0条)

    保存