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:原理、标准与实现》的学习笔记。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WEB 3D技术 three.js 顶点旋转

我们来说说几何体顶点的旋转 官网搜索 BufferGeometry 这里 我们有 x y z 三个轴的旋转 例如 我们这样的代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js"; i…

第二十七周:文献阅读笔记

第二十七周:文献阅读笔记 摘要AbstractDenseNet 网络1. 文献摘要2. 引言3. ResNets4. Dense Block5. Pooling layers6. Implementation Details7. Experiments8. Feature Reuse9. 代码实现 总结 摘要 DenseNet(密集连接网络)是一种深度学习神…

AI 工具探索(二)

我参加了 奇想星球 与 Datawhale 举办的 【AI办公 X 财务】第一期,现在这是第二次打卡,也即自由探索,我选择 Modelscope 的 Agent 探索,并用gpts创作助理对比! 最近想学学小红书的运营方法,选择了 小红书I…

图像分割-Grabcut法

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 本文的C#版本请访问:图像分割-Grabcut法(C#)-CSDN博客 GrabCut是一种基于图像分割的技术,它可以用于将图像…

CnosDB容灾方案概述

本文主要介绍了跟容灾相关的关键技术以及技术整合后形成的几种具体方案,每种方案都在RTO、RPO、部署成本和维护成本等方面有自己的特点和区别,可以根据具体场景选择最合适的方案。 基本概念 RTO(Recovery Time Objective)&#x…

Qt基本认识

1. 基本认识 1.1 学习方法: (1)英语阅读能力要好一点 QT将一些类和方法进行了封装,一般是采用英语(方法名、属性、子类、父类等等)进行介绍 (2)学习QT reator 1)多查帮助…

数据交互系列:认识 cookie

cookie的原理 http本身是一个无状态的请求,cookie最初的原始目的是为了维持状态而产生的。在首次访问网站时,浏览发送请求中并未携带cookie,即发送无状态请求服务器接受请求之后会在请求上的respond header上加入cookie相关信息并返回给浏览…

数字孪生在虚拟现实(VR)中的应用

数字孪生在虚拟现实(VR)中的应用为用户提供了更深入、沉浸式的体验,同时通过数字孪生技术模拟真实世界的物理实体。以下是数字孪生在VR中的一些应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发…

13年测试老鸟,性能测试-全链路压测总结,一文打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、什么是全链路压…

二维和三维联合进行圆孔空间定位

0.任务描述 对空间圆孔进行三维空间的定位,方便后续的抓取或装配流程:使用二维图与opencv霍夫圆检测进行二维上的定位,再从深度图上查询深度信息,结合相机内参计算出相机坐标系下圆孔的三维坐标信息,并在点云上进行标…

自定义View之重写onMeasure

一、重写onMeasure()来修改已有的View的尺寸 步骤: 重写 onMeasure(),并调用 super.onMeasure() 触发原先的测量用 getMeasuredWidth() 和 getMeasuredHeight() 取到之前测得的尺寸,利用这两个尺寸来计算出最终尺寸使用 setMeasuredDimensio…

[通俗易懂]c语言中指针变量和数值之间的关系

一、指针变量的定义 在C语言中,指针变量是一种特殊类型的变量,它存储的是另一个变量的内存地址。指针变量可以用来间接访问和操作内存中的其他变量。指针变量的定义如下: 数据类型 *指针变量名;其中,数据类型可以是任…

SQL优化:执行计划

前面我们讲述了使用索引或分区表来进行存储层次的优化,也讲述了通过条件提升进行结果集的优化。这边文章我们来学习一下其中的细节,即查看数据库是怎么一步一步把数据拿给我们的。也就是执行计划。 语法 explain sql语句 练习 首先,我们来玩下简单的 explain select * …

HUAWEI WATCH 系列 eSIM 全新开通指南来了

HUAWEI WATCH 系列手表提供了eSIM硬件能力,致力为用户提供更便捷、高效的通信体验。但eSIM 业务是由运营商管理并提供服务的,当前运营商eSIM业务集中全面恢复,电信已经全面恢复,移动大部分省份已经全面放开和多号App开通方式&…

20240107移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通能上网

20240107移远的4G模块EC20在Firefly的AIO-3399J开发板的Android11下调通能上网 2024/1/7 11:17 开发板:Firefly的AIO-3399J【RK3399】SDK:rk3399-android-11-r20211216.tar.xz【Android11】 Android11.0.tar.bz2.aa【ToyBrick】 Android11.0.tar.bz2.ab …

Docker mysql 主从复制

目录 介绍:为什么需要进行mysql的主从复制 主从复制原理: ✨主从环境搭建 主从一般面试问题: 介绍:为什么需要进行mysql的主从复制 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能&#xff…

如何恢复Mac误删文件?

方法1. 使用撤消命令 当你在 Mac 上删除了错误的文件并立即注意到你的错误时,你可以使用撤消命令立即恢复它。顾名思义,此命令会反转上次完成的操作,并且有多种方法可以调用它。如果你已经采取了其他操作或退出了用于删除文件的应用程序&…

算法与数据结构之数组(Java)

目录 1、数组的定义 2、线性结构与非线性结构 3、数组的表现形式 3.1 一维数组 3.2 多维数组 4、重要特性:随机访问 5、ArrayList和数组 6、堆内存和栈内存 7、数组的增删查改 7.1 插入数据 7.2 删除一个数据 7.3 修改数组 7.4 查找数据 8、总结 什么…

蓝桥杯基础知识2 全排列 next_permutation(), prev_permutation()

蓝桥杯基础知识2 全排列 next_permutation()&#xff0c; prev_permutation() #include<bits/stdc.h> using namespace std;int a[10];int main(){for(int i 1; i < 4; i)a[i] i; //4*3*2*1 24bool tag true;while(tag){for(int i1; i < 4; i)cout << a[…

Fiddler工具 — 8.会话列表(Session List)

1、会话列表说明 Fiddler抓取到的每条HTTP请求&#xff08;每一条称为一个session&#xff09;。 主要包含了请求的ID编号、状态码、协议、主机名、URL、内容类型、body大小、进程信息、自定义备注等信息。如下图&#xff1a; 说明&#xff1a; 名称含义#抓取HTTP Request的顺…