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_bit | f(1) | 值设置为0 | 
| nuh_reserved_zero_bit | u(1) | 值设置为0,1预留待未来使用 | 
| nuh_layer_id | u(6) | 表示NALU对应的层标识号,取值范围0~55,该值在一幅编码图像内的所有VCL NALU应该相同 | 
| nal_unit_type | u(5) | 表示NALU的类型,即NAL单元中包含的RBSP语法结构的类型,共5比特,分为VCL和non-VCL两类,取值0~31 | 
| nuh_temporal_id_plus1 | u(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:原理、标准与实现》的学习笔记。
相关文章:
H266/VVC网络适配层概述
视频编码标准的分层结构 视频数据分层的必要性:网络类型的多样性、不同的应用场景对视频有不同的需求。 编码标准的分层结构:为了适应不同网络和应用需求,视频编码数据根据其内容特性被分成若干NAL单元(NAL Unit,NALU…...
new FormData 同时发送表单 json 以及文件二进制流
需要新增时同时发送表单 json 以及对应的文件即可使用以下方法传参 let formDataParams new FormData(); 首先通过 new FormData() 创建你需要最后发送的表单 接着将你的对象 json 存储,注意使用 new Blob 创建大表单转换成 json 格式。以…...
计算机环境安全
操作系统安全----比如windows,linux 安全标识--实体唯一性 windows---主体:账户,计算机,服务 安全标识符SID-Security Identifier 普通用户SID是1000,管理用SID是500 linux---主体:用户,用户组…...
Activiti7工作流引擎:多租户
一:多租户 表示每个租户之间数据隔离互不影响,互不可见。通常一个租户表示一个系统应用(类似于appid的作用)或者一家公司。 通过数据库级别进行隔离,每个租户对应一个数据库;通过表记录级别进行隔离&…...
Postman实现压力测试
从事软件开发对于压力测试并不陌生,常见的一些压测软件有Apache JMeter LoadRunner Gatling Tsung 等,这些都是一些比较专业的测试软件,对于我的工作来说一般情况下用不到这么专业的测试,有时候需要对一些接口进行压力测试又不想再安装新软件,那么可以使用Postman来实现对…...
爬虫工具(tkinter+scrapy+pyinstaller)
需求介绍输入:关键字文件,每一行数据为一爬取单元。若一行存在多个and关系的关键字 ,则用|隔开处理:爬取访问6个网站的推送,获取推送内容的标题,发布时间,来源,正文第一段࿰…...
MySQL常用sql语句记录
1,创建用户及赋权 -- 创建用户 CREATE USER usernamelocalhost IDENTIFIED BY password;-- 赋予所有权限 GRANT ALL PRIVILEGES ON database_name.* TO usernamelocalhost;-- 赋予特定表的某些权限 GRANT SELECT, INSERT ON table_name TO usernamelocalhost;-- 更…...
2024.1.4力扣每日一题——被列覆盖的最多行数
2024.1.4 题目来源我的题解方法一 回溯位运算优化 题目来源 力扣每日一题;题序:2397 我的题解 方法一 回溯位运算优化 这道题一看就会想到使用回溯法,但是采用回溯法后如何判断有多少行被覆盖,直接计算矩阵时间复杂度较高&…...
Elasticsearch:Serarch tutorial - 使用 Python 进行搜索 (一)
本实践教程将教你如何使用 Elasticsearch 构建完整的搜索解决方案。 在本教程中你将学习: 如何对数据集执行全文关键字搜索(可选使用过滤器)如何使用机器学习模型生成、存储和搜索密集向量嵌入如何使用 ELSER 模型生成和搜索稀疏向量如何使用…...
第五讲_css元素显示模式
css元素显示模式 1. 元素的显示模式1.1 块元素1.2 行内元素1.3 行内块元素 2. 元素根据显示模式分类3. 修改元素的显示模式 1. 元素的显示模式 1.1 块元素 块元素的特性: 在页面中独占一行,从上到下排列。默认宽度,撑满父元素。默认高度&a…...
Shell脚本入门实战:探索自动化任务与实用场景
引言 Shell脚本作为一种强大的自动化工具,在现代操作系统中具有广泛的应用。无论是简单的文件操作,还是复杂的系统管理,Shell脚本都能提供高效、快速的解决方案。在本文中,我们将探索Shell脚本的基础知识,并通过实战场…...
【AI视野·今日Sound 声学论文速览 第四十二期】Fri, 5 Jan 2024
AI视野今日CS.Sound 声学论文速览 Fri, 5 Jan 2024 Totally 10 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers PosCUDA: Position based Convolution for Unlearnable Audio Datasets Authors Vignesh Gokul, Shlomo Dubnov深度学习模型需要大量干净的…...
Java中如何使用SQLite数据库
目录 SQLite简介SQLite优势安装 SQLite基本使用Java使用SQLite Springboot使用SQLite1.添加依赖2.配置数据库3.创建实体类 4.创建Repository接口5.创建控制器6.运行应用程序 SQLite简介 SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无…...
kettle的基本介绍和使用
1、 kettle概述 1.1 什么是kettle Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。 1.2 Kettle核心知识点 1.2.1 Kettle工程存储方式 以XML形式存储以资源库方式存储…...
数据结构第2章 栈和队列
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼《定风波莫听穿林打叶声》 本篇笔记整理:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 0、思维导图栈和队列1、栈1)特点2࿰…...
Axure鲜花商城网站原型图,网上花店订花O2O本地生活电商平台
作品概况 页面数量:共 30 页 兼容软件:仅支持Axure RP 9/10,非程序软件无源代码 应用领域:鲜花网、花店网站、本地生活电商 作品特色 本作品为「鲜花购物商城」网站模板,高保真高交互,属于O2O本地生活电…...
【docker】centos 使用 Nexus Repository 搭建私有仓库
Nexus Repository 是一种流行的软件仓库管理工具,它可以帮助您搭建私有仓库,以便在内部网络或私有云环境中存储、管理和分发各种软件包和组件。 它常被用于搭建Maven的镜像仓库。本文演示如何用Nexus Repository搭建docker 私有仓库。 使用Nexus Repos…...
RabbitMQ(八)消息的序列化
目录 一、为什么需要消息序列化?二、常用的消息序列化方式1)Java原生序列化(默认)2)JSON格式3)Protobuf 格式4)Avro 格式5)MessagePack 格式 三、总结 RabbitMQ 是一个强大的消息中间…...
23款奔驰GLC260L升级原厂540全景影像 安装效果分享
嗨 今天给大家介绍一台奔驰GLC260L升级原厂360全景影像 新款GLC升级原厂360全景影像 也只需要安装前面 左右三个摄像头 后面的那个还是正常用的,不过不一样的是 升级完成之后会有多了个功能 那就是新款透明底盘,星骏汇小许Xjh15863 左右两边只需要更换后…...
【CSS】文字描边的三种实现方式
目录 1. 可行的几种方式1.1. text-shadow 描边代码优缺点 1.2. text-stroke 描边实现优缺点 1.3. svg 描边实现优缺点 总结 1. 可行的几种方式 text-shadow–webkit-text-strokesvg 1.1. text-shadow 描边 MDN text-shadow 代码 <div class"text stroke">…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器:  线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。  每个线程都有一个程序计数…...
Go 并发编程基础:通道(Channel)的使用
在 Go 中,Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式,用于在多个 Goroutine 之间传递数据,从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
