H266/VVC网络适配层概述

视频编码标准的分层结构

视频数据分层的必要性:网络类型的多样性、不同的应用场景对视频有不同的需求。
编码标准的分层结构:为了适应不同网络和应用需求,视频编码数据根据其内容特性被分成若干NAL单元(NAL Unit,NALU),并对NALU的内容特性进行标识。网络只需要根据NALU及其标识就可以优化视频传输性能,不再需要亲自分析视频数据的内容特性。如下图就是典型的分层结构。
在这里插入图片描述
H266中NAL的作用机制: 原始图像经过编码(VCL)后,每幅图像变成难以理解的码流片段,每个码流片段内的数据不再具有类似像素表示的形式。NAL根据压缩视频码流的内容特性将其划分成多个数据段,对每个数据段进行分装并对内容特性进行标识,就生成了NALU,将内容特性信息存放在NALU头信息中。
在这里插入图片描述

网络适配层单元

NALU的组成: NALU头 和NALU载荷(原始字节序列载荷,Raw Byte Sequence Payload,RBSP)
在这里插入图片描述
H266的NALU头: 长度为固定两字节,反应NALU的内容特征。语法结构如下表。

语法元素编码方式解释
nal_umit_header(){
forbidden_zero_bitf(1)值设置为0
nuh_reserved_zero_bitu(1)值设置为0,1预留待未来使用
nuh_layer_idu(6)表示NALU对应的层标识号,取值范围0~55,该值在一幅编码图像内的所有VCL NALU应该相同
nal_unit_typeu(5)表示NALU的类型,即NAL单元中包含的RBSP语法结构的类型,共5比特,分为VCL和non-VCL两类,取值0~31
nuh_temporal_id_plus1u(3)NALU所在的时域层的标识号
}

H266的NALU类型:
在这里插入图片描述
在这里插入图片描述

H266的NALU载荷:
RBSP的长度为整数字节,承载视频编码后的比特流片段。
在视频编码过程中输出包含不同内容的压缩数据比特流片段,这些比特流片段称为SODB(String of Data Bits),SODB为最高有效位在左的存储形式,即字节内的比特按照从左到右、从高到低 的顺序排列,在SODB后添加RBSP尾(rbsp_trailing_bits)就生成了RBSP,RBSP尾由称为RBSP停止比特的一比特1和其后的零比特或多比特0组成。
RBSP 即整数化的SODB。
RBSP冲突避免处理:
RBSP不能直接作为NALU的载荷,因为在字节流应用环境中0x000001为NALU的起始码,0x000000为结束码。因此,为了避免NALU载荷中的字节流片段与NALU的都起始码、结束码冲突,需要对RBSP字节流进行冲突避免处理。
在这里插入图片描述

视频比特流中的NALU

H266使用了图像单元(PU)和接入单元(AU)的概念,每个AU包含同一时刻的一个或多个PU,每个PU包含且仅包含一幅完整图像的编码数据,每个图像编码数据包含一个或多个Slice NALU,即VCL NALU。此外一个PU还可以包含non-VCL NALU,比如各种参数集、SEI等。

AU的顺序及其与CVS的关系: 一个比特流包含一个或多个编码视频序列(CVS),从时间维度看,一个CVS包含一个或多个AU,从层级维度看,一个CVS包含一个或多个编码层视频序列(CLVS)。

PU的顺序及其与AU的关系: 一个AU包含一个或多个按照nuh_layer_id升序排列的PU。在一个AU中最多可以包含一个AU界定符(AU Delimiter, AUD)NALU。当AU中存在AUD NALU时,其应该为AU的第一个NALU,同时也是AU内第一个PU的第一个NALU。

编码图像和NALU的顺序及其与PU的关系: 一个PU由零个或一个PH NALU和一幅编码图像组成,编码图像包含一个或多个VCL NALU和零个或多个其他non-VCL NALU。

网络适配层单元的应用

NALU是压缩视频数据的基本单元,也是后续视频传输的基本单元。
字节流应用:
要求对NALU的边界进行标识以保证解码端可以对NALU进行识别。在每个NALU前面插入3字节的起始码start_code_prefix_one_3bytes,其对应的值为0x000001。其语法结构如下。
在这里插入图片描述
分组流应用:
视频分组流是网络传输的一种有效方式,当视频NALU作为网络分组的载荷在网络中传输时,不同的网络分组因承载不同特性的NALU而具有不同的重要性,网络可以根据分组重要性优化视频流的服务质量。基于RTP/UDP/IP的实时业务采用典型的分组流传输方式。

RTP分组由RTP头和RTP载荷前后两部分组成,其RTP头的结构如下图。
在这里插入图片描述
RTP分组的类型有单NALU分组(一个分组只承载一个NALU)、聚合分组(一个分组承载多个NALU)、分片分组(一个分组只承载一个NALU的一部分)。

参考

JVET输出文档: https://www.itu.int/wftp3/av-arch/jvet-site/
书籍: 新一代通用视频编码H266/VVC:原理、标准与实现[万帅 霍俊彦 马彦卓 杨付正/著]

备注

本系列博客主要是对《新一代通用视频编码H266/VVC:原理、标准与实现》的学习笔记。

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

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

相关文章

Docker学习笔记(一):Docker命令总结

Docker命令总结 一、Docker介绍1.1 镜像与容器区别 二、Docker命令 一、Docker介绍 Docker是一个开源的应用容器引擎,它允许开发者在几乎任何环境中运行应用程序,而无需担心运行环境的问题。Docker的核心概念是容器,它可以将应用程序及其依赖…

PLC远程上下载功能实现的基本原理

PLC远程上下载功能实现的基本原理 首先,需要一个支持PLC远程上下载的物联网网关,该网关通常具有网口、RS485、232等接口,以连接PLC和其他物联网设备。远程上下载物联网网关是一种用于实现PLC程序远程上传和下载的技术。PLC与物联网网关之间需…

c# entity freamwork 插入批量数据如何提升性能 AutoDetectChangesEnabled

在C#的Entity Framework(EF)中,AutoDetectChangesEnabled 是一个影响上下文行为的重要属性,它默认设置为 true。这个属性控制着DbContext实例自动检测实体对象 ** 中更改的能力。 当AutoDetectChangesEnabled 设置为 true时&…

2024--Django平台开发-基础信息(一)

一、前置知识点 - Python环境搭建 (Python解释器、Pycharm、环境变量等) - 基础语法(条件、循环、输入输出、编码等) - 数据类型(整型、布尔型、字符串、列表、字典、元组、集合等) - 函数(文件操作、返回值、参数、作用域等) - 面向对象 (类、对象、封装、继承、多态等)包和模…

Jtti:为什么建议企业使用存储型服务器?

随着企业业务的不断发展,数据存储已成为企业运营中不可或缺的一部分。存储服务器作为数据存储的重要设备之一,在企业中发挥着越来越重要的作用。本文将探讨企业为什么需要使用存储服务器,以及存储服务器对于企业的重要性。 可以满足企业不断增…

【动态规划】C++算法312 戳气球

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 LeetCode312 戳气球 有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。 现在要求你戳破所有的气球。戳破第 i 个气球&…

Simpy简介:python仿真模拟库-01/5

一、说明 在计算机编程领域,仿真在理解复杂系统、进行实验和做出明智决策方面发挥着关键作用。SimPy 是“Simulation Python”的缩写,是一个功能强大且多功能的仿真框架,允许开发人员和研究人员使用 Python 创建和分析离散事件仿真。无论您是…

视频如何制作微信表情?仅需一招在线制作

Gif动画表情包是当下一种非常流行的图片展示格式,能够通过gif格式的图片来调节聊天氛围或是传递信息,非常有趣。而gif动图现在也被各行各业的商家用作宣传使用,很吸引大众的目光。 那么,这种非常吸引人的gif动图是怎么制作的呢&a…

Power BI - 5分钟学习修改数据类型

每天5分钟,今天介绍Power BI修改数据类型 Power BI加载数据时,会尝试将源列的数据类型转换为更高效的存储、计算和数据可视化的数据类型。 例如,如果从Excel导入的值的列没有小数值,Power BI Desktop会将整个数据列转换为整数数据…

信息学奥赛一本通1268:【例9.12】完全背包问题代码+详解

题目链接:1268 题目 1268:【例9.12】完全背包问题 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 40600 通过数: 21799 【题目描述】 设有n�种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限的&…

Spanner on a modern columnar storage engine 中文翻译

文章目录 0. 摘要1. 存储引擎2. 存储引擎迁移的挑战2.1 可靠性、可用性和数据完整性2.2 性能和成本2.3 复杂性 3. 迁移可靠性的系统原则方法3.1 可靠性原则和自动化架构3.2 迁移方案和按周迁移3.3 客户 部署感知 调度3.4 管理可靠性、可用性和性能 4. 项目管理和驱动指标概括 0…

基于领域驱动设计的低代码平台的设计与实现

本文介绍了基于领域驱动设计(DDD)的低代码平台的设计与实现方法。低代码平台是一种能够通过图形化界面和少量编码,快速构建应用程序的工具。通过结合DDD的思想,我们可以将领域专家的知识转化为具体的领域模型,并将其作…

网络层协议及IP编址

0x00 前言 本节为网络层协议及IP编址内容 IP地址的范围:0.0.0.0-255.255.255.255 IP分为网络位以及主机位。子网划分就是向主机位借位。 网络层协议 IPICMP(internet Control message protocol)IPX IP协议的作用 为网络层的设备提供逻…

手把手教你新建一个winform项目(史上最全)

文章目录 前言:第1步、打开Microsoft Visual Studio(简称vs),本人这里使用的是Visual Studio 2017 专业版,如下图:1.2 Visual Studio Community 2019下载1.3 Visual Studio Community 2019 安装 第2步、点击…

2024年【A特种设备相关管理(锅炉压力容器压力管道)】报名考试及A特种设备相关管理(锅炉压力容器压力管道)模拟考试题库

题库来源:安全生产模拟考试一点通公众号小程序 A特种设备相关管理(锅炉压力容器压力管道)报名考试是安全生产模拟考试一点通总题库中生成的一套A特种设备相关管理(锅炉压力容器压力管道)模拟考试题库,安全…

nodejs版本管理工具nvm的安装与使用

提示:nodejs版本管理工具nvm的安装与使用 文章目录 前言一、安装二、淘宝镜像配置三、安装所需版本的nodejs四、切换nodejs版本五、参考文档总结 前言 需求:新建一个vue3项目,,提示写法错误 查原因为node版本过低 随着技术更新迭…

Python Asyncio网络编程方法全面解析与实战应用!

更多Python学习内容:ipengtao.com Python的asyncio库是一种强大的异步编程工具,它使得编写高效的网络应用程序变得更加容易。在本文中,我们将深入探讨使用asyncio进行网络编程的方法,包括异步IO、协程、事件循环等方面的内容&…

华为认证 | HCIP和HCIE难度差多了?

许多有志于在ICT领域发展的人士,都希望获得华为的HCIP或HCIE认证。 那么,考取这些认证到底需要多少钱?HCIP和HCIE的难度又存在怎样的差异?下面将为您揭晓答案。 01 考华为HCIE多少钱? ★ 考试费用 华为HCIE认证考试的…

22. Mysql 触发器

文章目录 概念常见操作查看触发器创建触发器删除触发器 精选示例数据完整性约束数据同步日志记录 总结参考资料 概念 触发器(Trigger)是 Mysql 数据库中的一种特殊的存储过程,它会在数据库中的指定表上自动执行某些操作。当满足触发器定义的…

Python编程+copilot+代码补全+提高效率

Python编程copilot代码补全提高效率 copilot是由Github和OpenAI合作开发的一款AI编程工具,它可以根据自然语言或部分代码,自动给出合适的代码补全建议。copilot支持多种编程语言,包括Python,也可以在Pycharm等主流IDE中使用。本资…