首页 > 其他分享 >H265 NALU类型详细解析

H265 NALU类型详细解析

时间:2024-03-10 16:25:08浏览次数:30  
标签:00 01 H265 NAL NALU 解析 type unit

1. H265 NALU类型解析


F: 禁止位,必须为0,表示有效;为1的话表示无效。

Type: 6-bits NALType 确定NAL的类型,其中VCL NAL和non-VCL NAL各有32类。0-31是vcl nal单元;32-63,是非vcl nal单元。VCL是指携带编码数据的数据流,而non-VCL则是控制数据流。

vcl nal单元的类型(0-31)如下表:

 

non-vcl nal单元的类型(32-63)如下表:

 

 

Non-VCL NAL Type:Non-VCL NAL的种类如上图,Parameter sets包括VPS、SPS和PPS。

Delimiters(分隔符)包括AUD_NUT、EOS_NUT、EOB_NUT,其中AUD_NUT用于指示access unit的边界,所以和access unit内的VCL NAL有相同的TID,是access unit内的第一个NAL。EOS_NUT、EOB_NUT分别表示CVS和bitstream的结束,它们的TID为0,没有payload,只有2-Type的header。
Filler Data对解码过程并没有任何影响,payload就是由一串’11111111’和1-Type的’10000000’组成,主要用来填充

SEI:supplemental enhancement informatyion,辅助增强信息,提供可选的解码支持元数据。在HEVC中,SEI是prefix(SEI必须在Access unit的所有VCL NAL之前)或者suffix(SEI可以在Access unit的VCL NAL之后)的,而且SEI有些是只对当前Access unit有效,有些作用范围可能是多个Access unit甚至整个SVC。VUI是在SPS中的可选信息,VUI不直接影响解码过程,但是提供两个方面的信息:1、解码图像的展示信息,包括宽高比、扫描、分时等信息;2、限制解码端的一些信息,包括tiles、MV、参考图像等。

LayerID:表示NAL所在的Access unit所属的层,该字段是为了HEVC的继续扩展设置。也就是目前都是0,以后的扩展可能会用到。

 

TID:该值减一,时域层标识号,表示该NALU的时域层级。

2. H265 帧类型解析
和H.264的&0x1F不同,H.265是 :
int type = (code & 0x7E)>>1;
根据H265的NALU类型定义分析:
(1)控制数据流:
00 00 00 01 40 01 的nuh_unit_type的值为 32, 语义为视频参数集 VPS
00 00 00 01 42 01 的nuh_unit_type的值为 33, 语义为序列参数集 SPS
00 00 00 01 44 01 的nuh_unit_type的值为 34, 语义为图像参数集 PPS
00 00 00 01 4E 01 的nuh_unit_type的值为 39, 语义为补充增强信息 SEI

 


VPS、SPS、PPS:三者的结构和关系如下图所示:

 

3. H265一个图像序列的组成:VPS+SPS+PPS+SEI+一个I帧+若干个P帧。VPS、SPS、PPS、SEI、一个I帧、一个P帧都可以称为一个NALU。

4. H265的NALU结构:开始码+NALU头+NALU数据
(1)、开始码大小为四个字节,是一个固定值00 00 00 01(十六进制),标识一个NALU的开始。
(2)、NALU头大小为两个字节,共16位,第1位值为0,第2-7位为NALU的type位(共6位),标识当前NALU的类型
,第8-15位值为0,第16位值为1。
(3)、NALU数据为编码器编出来的图像信息或图像数据。

5. 六种类型的NALU
(1)、VPS(视频参数集):NALU头值为0x40 01(十六进制),NALU头type位值为32(十进制)。
(2)、SPS(序列参数集):NALU头值为0x42 01(十六进制),NALU头type位值为33(十进制)。
(3)、PPS(图像参数集):NALU头值为0x44 01(十六进制),NALU头type位值为34(十进制)。
(4)、SEI(补充增强信息):NALU头值为0x4e 01(十六进制),NALU头type位值为39(十进制)。
(5)、I帧:NALU头值为0x26 01(十六进制),NALU头type位值为19(十进制)。
(6)、P帧:NALU头值为0x02 01(十六进制),NALU头type位值为1(十进制)。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/ichenwin/article/details/121385557

标签:00,01,H265,NAL,NALU,解析,type,unit
From: https://www.cnblogs.com/cnhk19/p/18064302

相关文章

  • 全面解析 Redis 持久化:RDB、AOF与混合持久化
    前言:每次你在游戏中看到玩家排行榜,或者在音乐应用中浏览热门歌单,有没有想过这个排行榜是如何做到实时更新的?当然,依靠Redis即可做到。在技术领域,我们经常听到「键值存储」这个词。但在Redis的世界里,这只是冰山一角。Redis的对象,不仅仅是简单的数据,它们是为各种任务量身定......
  • spdlog 源码解析
    spdlog是开源、高性能、跨平台,支持header-only/compiled的C++日志库。本文主要目的是对spdlogv1.13.0的源码进行分析(编译运行环境为6.5.0-18-generic#18~22.04.1-Ubuntu),以探讨spdlog如何构建高性能、可扩展的日志框架的。github链接gabime/spdlog:FastC++loggingli......
  • app自动化测试环境安装和原理解析
    1.移动测试的基本介绍定义:测试手机程序:appApp程序测试点:功能测试安装卸载测试升级测试兼容性测试不同的手机的系统使用测试环境不同androidios其他:基于Android二次开发系统华为:鸿蒙系统小米:澎湃系统网络切换网络终端使用中来电,短信横竖屏切换健壮性......
  • ubuntu c语言 opencv实现h265 编码
    在Ubuntu上使用C语言和OpenCV实现H.265编码,你可以遵循以下步骤:安装依赖:首先确保你的系统已经安装了Ubuntu最新版本,并更新所有包列表。安装FFmpeg,因为OpenCV使用FFmpeg来处理视频编码。可以使用以下命令安装:复制sudoaptupdatesudoaptinstallffmpeg安装OpenCV:OpenCV库本......
  • 【深度解析】'go build'缓存机制:揭秘Windows下缓慢的原因
    引言本文主要围绕gobuild的缓存hash计算与获取缓存文件来编写。  笔者是Windows系统用户,在gobuild或golist-export一些需要编译(但已存在编译缓存)场景下执行的很慢。网上有很多说法大多都是说关闭杀毒软件、关闭磁盘扫描等,并未清楚的描述为什么。  接下来我将围绕g......
  • yolo-world 源码解析(一)
    .\YOLO-World\configs\deploy\detection_onnxruntime-fp16_dynamic.py#设置基础路径为指定的配置文件路径_base_=('../../third_party/mmdeploy/configs/mmdet/detection/''detection_onnxruntime-fp16_dynamic.py')#定义代码库配置,包括模型类型、任务类型、后处......
  • MySQL(四):InnoDB引擎底层解析
    官方文档地址:https://dev.mysql.com/doc/refman/8.3/en/innodb-storage-engine.html。InnoDB存储引擎有三大特性:双写机制、BufferPool、自适应Hash。InnoDB存储引擎架构的内存和磁盘结构如下:上述架构图描述了数据在内存和磁盘上的流转和存储流程,在实际开发......
  • yolo-world 源码解析(二)
    .\YOLO-World\configs\pretrain\yolo_world_v2_l_vlpan_bn_2e-3_100e_4x8gpus_obj365v1_goldg_train_1280ft_lvis_minival.py#设置基础配置文件路径_base_=('../../third_party/mmyolo/configs/yolov8/''yolov8_l_syncbn_fast_8xb16-500e_coco.py�......
  • yolo-world 源码解析(三)
    .\YOLO-World\configs\segmentation\yolo_world_seg_l_dual_vlpan_2e-4_80e_8gpus_seghead_finetune_lvis.py_base_=('../../third_party/mmyolo/configs/yolov8/yolov8_l_mask-refine_syncbn_fast_8xb16-500e_coco.py')#定义基础配置文件路径custom_imports......
  • yolo-world 源码解析(四)
    PreparingDataforYOLO-WorldOverviewForpre-trainingYOLO-World,weadoptseveraldatasetsaslistedinthebelowtable:DataSamplesTypeBoxesObjects365v1609kdetection9,621kGQA621kgrounding3,681kFlickr149kgrounding641kCC3M-L......