H265码流结构分析

2024-05-27 09:38
文章标签 分析 结构 码流 h265

本文主要是介绍H265码流结构分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1 准备工作
    • 1.1 H265视频文件
    • 1.2 参考文档
    • 1.3 参考博文
  • 2 分析
    • 2.1 NALU type
      • 2.1.1 H264
      • 2.1.2 H265
    • 2.2 实例分析

最近了解了一下H265的码流结构,对比H264的码流结构做了一些分析,简单记录一下,对输入的内容做个输出,防止忘记

1 准备工作

1.1 H265视频文件

稍后需要对H265视频文件进行分析,所以直接下载live555官网中提供的h265视频文件:
http://www.live555.com/liveMedia/public/265/

1.2 参考文档

H264码流结构文档直接参考海思中的说明:
《H.264 PC解码库软件开发指南.pdf》

H265码流结构文档参考:
《T-REC-H.265-201504-I!!PDF-E.pdf》

1.3 参考博文

h265 Nalu类型判断及 sps 数据解析
https://blog.csdn.net/machh/article/details/72190321

HEVC码流解析
https://blog.csdn.net/CrystalShaw/article/details/80624804

H.265/HEVC学习笔记之二:码流分析
https://blog.csdn.net/c250456789/article/details/62427968

2 分析

关于SPS/PPS/IDR/P/B等概念这里就不再详细说明。H264和H265的每一个NALU前缀码也是一样的,即“0x00 00 00 01”或者 “0x00 00 01”。

H265相比较于H264,多了一些概念,例如VPS,目前对这个参数还在了解中,详细了解可以参考博文:
HEVC编码结构:序列参数集SPS、图像参数集PPS、视频参数集VPS
https://blog.csdn.net/lin453701006/article/details/52797104

2.1 NALU type

2.1.1 H264

在H264中,每一个前缀码后面跟随的第一个字节即为NALU的语法元素,主要有三部分组成:
forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)

所以,在H264中,我们如果需要获取NALU的类型,则可以通过以下方式进行解析:

nalu_type = first_byte_in_nal & 0x1F

nalu_type如下所示:
在这里插入图片描述

2.1.2 H265

而在H265中,每一个前缀码后面跟随的前两个字节为NALU的语法元素,主要有四部分组成:

forbidden_zero_bit(1):nal_unit_type(6):nuh_layer_id(6):nuh_temporal_id_plus1(3)

在文档中定义如下:
在这里插入图片描述
可以看到,NALU的语法元素由H264的一个字节变为两个字节,而nal_unit_type则为NALU的类型,因此我们可以通过以下获取NALU的类型:

int type = (code & 0x7E)>>1;

type的定义值如下:
在这里插入图片描述
在这里插入图片描述
上图,即为H265的NALU的TYPE,这里可以将上面的type简单的理解为如下我们需要的类型:
VPS=32 SPS=33 PPS=34 IDR=19 P=1 B=0

2.2 实例分析

如下,为下载的视频文件surfing.265的头部信息
在这里插入图片描述
如上我们看到了四个NALU包,每个NALU的头部信息为:

① 00 00 00 01 40 01  ---> (0x40 & 0x7E)>>1 = 32 ---> VPS
② 00 00 00 01 42 01  ---> (0x42 & 0x7E)>>1 = 33 ---> SPS
③ 00 00 00 01 44 01  ---> (0x44 & 0x7E)>>1 = 34 ---> PPS
④ 00 00 00 01 26 01  ---> (0x26 & 0x7E)>>1 = 19 ---> IDR

通过以上头结构也可以看到,NALU的与语法元素中,forbidden_zero_bit通常为0,nuh_layer_id通常为0,nuh_temporal_id_plus1通常为1。

这篇关于H265码流结构分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007115

相关文章

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

最长公共子序列问题的深度分析与Java实现方式

《最长公共子序列问题的深度分析与Java实现方式》本文详细介绍了最长公共子序列(LCS)问题,包括其概念、暴力解法、动态规划解法,并提供了Java代码实现,暴力解法虽然简单,但在大数据处理中效率较低,... 目录最长公共子序列问题概述问题理解与示例分析暴力解法思路与示例代码动态规划解法DP 表的构建与意义动

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis主从复制的原理分析

《Redis主从复制的原理分析》Redis主从复制通过将数据镜像到多个从节点,实现高可用性和扩展性,主从复制包括初次全量同步和增量同步两个阶段,为优化复制性能,可以采用AOF持久化、调整复制超时时间、... 目录Redis主从复制的原理主从复制概述配置主从复制数据同步过程复制一致性与延迟故障转移机制监控与维

Redis连接失败:客户端IP不在白名单中的问题分析与解决方案

《Redis连接失败:客户端IP不在白名单中的问题分析与解决方案》在现代分布式系统中,Redis作为一种高性能的内存数据库,被广泛应用于缓存、消息队列、会话存储等场景,然而,在实际使用过程中,我们可能... 目录一、问题背景二、错误分析1. 错误信息解读2. 根本原因三、解决方案1. 将客户端IP添加到Re

Java中switch-case结构的使用方法举例详解

《Java中switch-case结构的使用方法举例详解》:本文主要介绍Java中switch-case结构使用的相关资料,switch-case结构是Java中处理多个分支条件的一种有效方式,它... 目录前言一、switch-case结构的基本语法二、使用示例三、注意事项四、总结前言对于Java初学者

Redis主从复制实现原理分析

《Redis主从复制实现原理分析》Redis主从复制通过Sync和CommandPropagate阶段实现数据同步,2.8版本后引入Psync指令,根据复制偏移量进行全量或部分同步,优化了数据传输效率... 目录Redis主DodMIK从复制实现原理实现原理Psync: 2.8版本后总结Redis主从复制实