音视频数据处理-H265/HEVC视频码流分析

news2024/11/24 1:01:56

一、H265概述

H265/HEVC(Hight Efficiency Video Coding)是由ITU-T和ISO/IEC两大组织在H264/AVC的基础之上推出的新一代高效视频编码标准,主要为应对高清和超高清视频在网络传输和数据存储方面带来的挑战。上一篇文章对H264/AVC视频码流进行了详细的分析,本文继续从数据处理的角度对H265/HEVC视频码流进行详细分析。

二、H265分层结构

H265的分层结构与H264类似,分为视频编码层(VCL:Video Code Layer)和网络抽象层(NAL:Network Abstract Layer)。

VCL层:对视频的原始数据进行压缩,包含原始的视频数据。

NAL层:将视频压缩数据根据内容不同划分成不同类型的NALU单元进行网络传输。

三、H265码流结构

H265原始码流(裸流)是由多个NAL单元组成的,具体如下图所示:

NALU单元是由什么组成的呢?和H264的NALU单元组成一样,主要由三部分组成,具体如下图所示:

1.Start Code

Start Code,即开始码,一般为4字节或3字节,必须是“0x00 0x00 0x00 0x01”或“0x00 0x00 0x01”,用来表示一个NALU单元的开始。

2.NALU Header

NALU Header,占2个字节,由forbidden_bit(1bit),nal_unit_type(6bits),nuh_layer_id(6bit),nuh_temporal_id_plus1(3bit)四部分组成,具体如下图所示:

(1)forbidden_bit(1bit)

F禁止位,占用NALU Header的第一个字节的第一个位,值默认0,值为1时表示错误,当网络发现NAL单元有比特错误时可设置该比特为1,以便接收方纠错或丢掉该单元。

(2)nal_unit_type(6bits)

Type类型,占用NALU Header的第一个字节的第二到七位,用来表示NAL单元的类型,具体取值如下图所示:

H265 NALU Type

(3)nuh_layer_id(6bit)

LayerId预留位,占用NALU Header的第一个字节的最后一位和第二个字节的前五位,默认全为0,用于未来扩展。

(4)nuh_temporal_id_plus1(3bit)

TID时域层标号,占用NALU Header的第二个字节的最后三位,一般默认值为1,其值减1为该NALU时域层标号。

3.NALU Payload

NALU Payload,即视频压缩数据RBSP,但是严格意义上来说,Payload数据应该是EBSP,接下来详细介绍一下H265码流数据中的相关概念,与H264类似。

SODB(String Of Data Bits):原始数据比特流

由VCL层产生的的原始数据流,由于数据长度不一定是8的倍数,为方便计算机进行处理,就用到了RBSP。

RBSP(Raw Byte Sequence Payload):原始字节序列载荷

即在SODB的后面添加了trailing bits,即一个bit 1和若干个bit 0,以便字节对齐。

EBSP (Encapsulated Byte Sequence Payload):扩展字节序列载荷

NALU单元是通过开始码“0x00 0x00 0x00 0x01”或者“0x00 0x00 0x01”来表示一个NALU单元的开始,同时H265规定,当检测到“0x00 0x00 0x00”时,也可以表示当前NALU的结束。那这样就会产生一个问题,就是如果在NALU的内部,出现了“0x00 0x00 0x01”或“0x00 0x00 0x00”时该怎么办?所以在h265码流中规定每有两个连续的“0x00 0x00”,就增加一个“0x03”,从而预防压缩后的数据与开始码产生冲突,防止竞争。

四、H265数据示例

利用UItraEdit工具打开一个H265文件进行数据分析,如下图所示:

如上图所示,我们可以清晰的看到在H265码流中,是以“0x00 0x00 x00 0x01”为开始码的,找到开始码后,后面的两个字节表示NALU Header,上图所示分别标注了VPS、SPS、PPS、IDR类型。

五、总结

本文主要从数据处理的角度对H265视频码流数据进行了分析,这也是音视频数据处理的基础,后续会针对音视频开发技术进行详细的介绍。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/685480.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python自动化定位元素的方法详解

Python自动化定位元素的方法详解 作为一名Python编程经验丰富的工程师,我经常需要用到自动化定位元素的方法。今天,我想与大家分享一下在Python中如何自动化定位元素,以帮助那些想要进行Web自动化测试的开发者们。 什么是自动化定位元素 在…

chatgpt赋能python:Python聊天界面:开发高效且易于使用的消息应用

Python聊天界面:开发高效且易于使用的消息应用 Python是一种十分流行的编程语言,最近几年来,这种语言在GUI应用程序开发方面也越来越受欢迎。在本篇文章中,我们将介绍如何使用Python开发一个高效且易于使用的消息应用程序——聊天…

chatgpt赋能python:Python自动化定位——解放SEO员工的双手

Python自动化定位——解放SEO员工的双手 SEO(Search Engine Optimization)是现代数字营销中必不可少的一环。面对庞大的网络世界,SEO员工们日复一日地进行着关键词排名、页面跳转、链接检测等重复且繁琐的工作。而Python作为一种功能强大、易…

chatgpt赋能python:Python自动执行:提高效率,增强灵活性

Python自动执行: 提高效率,增强灵活性 随着时代进步,人们日常生活中越来越依赖计算机和网络技术,而在编程领域,Python语言作为一种高效、可读性好、易学易用的语言,得到了广泛应用。其中,Pytho…

【算法之栈与队列I】leetcode239. 滑动窗口最大值

232.用栈实现队列 力扣题目链接 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并…

使用netwox 的实例进行ARP地址解析协议分析【网络工程】(保姆级图文)

目录 1. netwox 构造 ARP 报文使用 netwox 工具构造 ARP 包。1) 查看 netwox 所在主机默认的 ARP 包的相关信息,执行命令如下:2) 构造 ARP 请求包,请求目标主机 192.168.43.95,执行命令如下:3) 为了验证构造的 ARP 请求…

IDEA(2021.3.3) 登录Github copilot最新版本报错解决

"Request sign ln Initiate failed with message:read ECONNRESET, request id: 6, error code:-32603 " .在获得github认证后的登录设备验证阶段弹出。此处应该为login 弹出异常,方法一:先使用Github 520进行动态替换,打开自己hos…

霍夫变换椭圆检测(matlab仿真与图像处理系列第2期)

概述 椭圆检测是图像处理中的一个重要问题,其目的是从图像中检测出可能存在的椭圆。在实际的应用中,椭圆常常被用来描述物体的形状或者得到物体的尺寸信息。 传统的椭圆检测方法通常采用二维Hough变换,在求解过程中需要处理大量的数据,并且计算复杂度高,导致速度较慢,…

linux系统grep文本三剑客之一

文章目录 一、grep常用选项二、正则表达式三、sort命令四、tr命令五、cut命令六、split命令七、paste命令八、正则表达式总结 一、grep常用选项 grep:文本三剑客之一,对文本内容进行过滤,支持正则表达式,针对行来进行处理。 -m&a…

【C++】 Qt-信号与槽

文章目录 基本概念添加信号与槽方法一方法二 自定义信号与槽CheckBox自定义QMessageBox自定义信号 信号与槽多对多一个信号连接多个槽多个信号连接一个槽一个信号连接一个信号连接一个槽 断开连接方法一方法二判断是否连接成功 基本概念 信号(signal)和…

chatgpt赋能python:Python自动执行函数——提高生产力的利器

Python自动执行函数 —— 提高生产力的利器 Python作为一种高级编程语言,具有强大的自动化能力,可以轻松实现多种任务的自动执行,从而提高生产力和效率。这篇文章将介绍如何使用Python自动执行函数,以及它对于SEO的重要意义。 什…

Flutter Dart类

目录 类 构造函数 命名构造函数 重定向构造函数 常量构造函数 工厂构造函数 Getters 和 Setters 初始化列表 可覆写的操作符 类 创建一个dart文件,名称全小写,里面的类可以按照驼峰命名法。文件名和类名可以不保持统一,这个跟Java有明…

Scrapy: 一个强大的 Python 爬虫框架--介绍--下载--启动!!

目录 Scrapy 影响力 介绍 主要特点 架构 运行流程 基本使用 安装 创建 Scrapy 项目 创建爬虫 爬虫包含的内容 运行爬虫 Scrapy 影响力 作为目前爬虫主流框架之一,Scrapy的影响力和应用范围非常广泛: 根据GitHub上的数据,Scrapy是一…

ERR! code ERR_SOCKET_TIMEOUT

问题 安装npm包,终端报错ERR! code ERR_SOCKET_TIMEOUT ERR! code ERR_SOCKET_TIMEOUT详细问题 笔者运行以下命令重新安装依赖项: npm install控制台报错,具体报错信息如下 npm ERR! code ERR_SOCKET_TIMEOUT npm ERR! network Socket t…

【C++】【VLD】VLD检测内存泄漏

【C】【VLD】VLD检测内存泄漏 C/C 程序越复杂,内存的管理显得越重要,稍有不慎就会出现泄漏。如果内存泄漏不是很严重,在短时间内对程序不会有太大影响,这也使得内存泄漏问题有很强的隐蔽性,不易被发现。 然而不管内存…

计算机网络——传输层

序言 计算机网络中的传输层在当今的社会起到了什么作用? 计算机网络中的传输层在通信和数据传输方面起着至关重要的作用。传输层是计算机网络体系结构中的一层,它负责提供端到端的可靠数据传输和通信服务;有着以下几个方面作用:可…

3-css高级特效-2

01-空间转换 空间转换简介 空间:是从坐标轴角度定义的 X 、Y 和 Z 三条坐标轴构成了一个立体空间,Z 轴位置与视线方向相同。空间转换也叫 3D转换属性:transform 平移 transform: translate3d(x, y, z); transform: translateX(); transfor…

chatgpt赋能python:Python聊天机器人程序:把智能带入聊天

Python聊天机器人程序:把智能带入聊天 在数字化时代,机器人指引和客户服务变得越来越流行。为了快速而有效地满足这种需求,聊天机器人被广泛研究与开发。Python是在这方面一个非常受欢迎的编程语言,能够快速地构建聊天机器人。在…

【C++】win 10 / win 11:Visual Studio 2022 社区版免费下载与安装

目录 一、Visual Studio 2022 下载 二、Visual Studio 2022 安装 三、Visual Studio 2022 快捷方式创建 四、Visual Studio 2022 使用 一、Visual Studio 2022 下载 Visual Studio 2022 官方下载https://visualstudio.microsoft.com/zh-hans/downloads/首先登陆 Visual Stu…

基于Java医院在线挂号预约系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…