NAL 网络提取层(Network Abstraction Layer)

1.NAL全称Network Abstract Layer, 即网络抽象层。

        在H.264/AVC视频编码标准中,无论是存储还是网络传输,H264 原始码流是由一个接一个 NALU(NAL Unit) 组成,整个系统框架被分为两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。

        VCL:负责有效表示视频数据的内容,包括核心压缩引擎和块、宏块和片的语法级别定义,设计目标是尽可能地独立于网络进行高效的编码。
        NAL:负责格式化数据并提供头信息,将 VCL 产生的比特字符串适配到各种各样的网络和多元环境中,覆盖了所有片级以上的语法级别。

2.视频压缩

2.1帧内压缩

        帧内压缩是生成I帧的算法 。
        帧内压缩,指的是一帧图片的内部压缩。当H.264对图片进行 16 * 16 分块后,会对每个小块内的图像进行分析,如果2个小块图像比较相近,那么住需要存储一张即可,无需存储重复图块。这样可以有效压缩图片的存储大小。
        帧内(Intraframe)压缩的原理是:当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,一般采用有损压缩算法,由于帧内压缩是编码一个完整的图像,所以可以独立的解码、显示。帧内压缩率一般不高。

2.2帧间压缩

        帧间压缩是生成B帧和P帧的算法 。
        帧间压缩 , 指的是图片间的图像压缩。在每帧图片划分成16 * 16 小块的图像进行分析基础上,比图片间的数据,如果两张图片比较相近,对相同的图像模块只需存储一份,对不同的部分再做存储。避免了重复数据的存储,极大改善了图片压缩空间。
        帧间(Interframe)压缩的原理是:相邻几帧的数据有很大的相关性,或者说前后两帧信息变化很小的特点。连续的视频其相邻帧之间具有冗余信息,根据这一特性,压缩相邻帧之间的冗余量就可以进一步提高压缩量,减小压缩比。

帧间压缩也称为时间压缩(Temporalcompression),它通过比较时间轴上不同帧之间的数据进行压缩。帧间压缩是无损的,它通过比较本帧与相邻帧之间的差异,仅记录本帧与其相邻帧的差值,这样可以大大减少数据量。

3.NALU的类型

        在H.264/AVC中,定义了多种NALU的类型,以适应不同的应用场景。下面是一些常见的类型:

帧内预测(I)
        仅使用当前帧的信息进行编码。也叫帧内压缩,可以通过视频解压算法解压成一张完整的图片,它是一帧画面的完整保留,也被成为关键帧,一般在检测到丢包时,我们会立即向对方强求一个I帧。

预测(P)
        使用前一帧的信息进行编码。也叫帧间压缩,前向预测编码帧,其表示的是这一帧与前一帧的差别,即预测差值与运动矢量。

双向预测(B)
        使用前一帧和后一帧的信息进行编码。双向预测编码帧,记录的是本帧与前后帧的差别,其压缩率较高,但是解码对性能要求较高,一般不使用。

序列参数集(SPS)
        全称Sequence Paramater Set,包含了一组连续图像的编码信息。

图像参数集(PPS)
        全称Picture Paramater Set,包含了一个图像的编码信息。

4.NALU的结构

        每个NALU包含了一个字节大小的NALU头信息(NAL header),以及一个原始字节序列负荷(RBSP,Raw Byte Sequence Payload)。

4.1头部

        头部是NALU的固定部分,占1字节。它包含了以下信息:

禁止位(forbidden_zero_bit)
        1比特,必须为0。

NAL引用指数(nal_ref_idc)
        2比特,表示该NALU的重要性。值越大,重要性越高。解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU,而不影响图像的回放 。 如果当前NALU是属于参考帧的片,或是序列参数集,或是图像参数集这些重要的单位时,本句法元素必需大于0。

NAL单元类型(nal_unit_type)
        5比特,表示NALU的类型。例如,类型可以是编码的视频数据、参数集等。

NALU类型的详细解析表 :

常见的NALU类型:

十六进制、二进制    类型        重要性                         类型值
0x67 (0 11 00111)    SPS        非常重要                  type = 7
0x68 (0 11 01000)    PPS       非常重要                  type = 8
0x65 (0 11 00101)    IDR帧    关键帧 非常重要       type = 5
0x61 (0 11 00001)    I帧         非常重要                   type=1非IDR的I帧不大常见
0x41 (0 10 00001)    P帧        重要                          type = 1
0x01 (0 00 00001)    B帧        不重要                      type = 1
0x06 (0 00 00110)    SEI        不重要                       type = 6

分析:以00 00 00 01分割之后的下一个字节就是NALU类型,将其转为二进制数据后,解读顺序为从左往右算,如下:

(1)第1位禁止位,值为1表示语法出错
(2)第2~3位为参考级别
(3)第4~8为是nal单元类型

其中0x67的二进制码为:
        0110 0111
        4-8为00111,转为十进制7,参考第二幅图:7对应序列参数集SPS

其中0x68的二进制码为:
        0110 1000
        4-8为01000,转为十进制8,参考第二幅图:8对应图像参数集PPS

其中0x65的二进制码为:
        0110 0101
        4-8为00101,转为十进制5,参考第二幅图:5对应IDR图像中的片(I帧)

        判断是否为I帧的算法为: (NALU类型  & 0001  1111) = 5   即   NALU类型  & 31 = 5

比如0x65 & 31 = 5

4.2原始字节序列负荷(RBSP,Raw Byte Sequence Payload)

        原始字节序列负荷部分是NALU的可变部分,包含了封装的数据。其内容取决于NALU的类型。

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

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

相关文章

敏感内容识别是如何实现的?5大妙招教你快速筛选敏感词!

敏感内容识别是现代信息安全领域的重要课题,其实现依赖于多种技术和策略的综合运用。 以下是五种快速筛选敏感词的妙招: 一、关键词匹配 方法:通过使用安企神这类敏感词识别软件预设敏感词库,将待检测内容与敏感词库进行比对&am…

安达发|纺织行业APS系统中的物料替代解决方案

在纺织行业中,物料替代是应对原材料短缺、成本波动和供应链不确定性的一种重要策略。高级计划与排程系统(APS)通过集成物料替代功能,可以帮助企业在保持生产效率的同时,灵活应对市场变化。本文将探讨纺织行业在APS系统…

OpenFeign-快速使用-连接池-使用的最佳方案-日志配置

OpenFeign 我们利用Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。但是远程调用的代码太复杂了: 其实远程调用的关键点就在于四个: 请求方式 请求路径 请求参数 返回值类型 所以,OpenFeign就利用SpringMVC的相关注解来声明上述4个参数,然后基于动态代理…

PHP人才机遇桥梁招聘求职全能系统小程序源码

人才机遇桥梁 —— 招聘求职全能系统全解析 💼🚀 🌉 搭建人才与机遇的桥梁 在这个竞争激烈的职场环境中,找到一份心仪的工作或招募到合适的人才,往往不是一件容易的事。但幸运的是,我们有了“人才机遇桥梁…

JDK1.8 新的特性

一 Lambda 使用 Lambda表达式应用场景:任何有函数式接口的地方,只有一个抽象方法(Object类中的方法除外)的接口是函数式接口。就像Runnable接口中,只有一个run方法。 1、Runnable //在JDK1.8之前的写法new Thread(new Runnable() {public v…

养老院管理系统(含源码+sql+视频导入教程+文档)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 养老院管理系统拥有两种角色:管理员和护工 管理员:用户管理、老人信息管理、事故记录管理、入住费用管理、护工薪资管理、护工请假管理、床位管理、请假管理等 护…

【机器学习基础】Transformer学习

Transformer学习 梯度消失FeedForward层激活函数的主要作用是在网络中加入非线性变换 梯度消失 梯度爆炸 FeedForward层 Transformer结构: Transformer结构主要分为两大部分: 一是Encoder层结构:Encoder 的输入由 Input Embedding 和 Positional Embedding 求和输入Multi…

大模型部署——NVIDIA NIM 和 LangChain 如何彻底改变 AI 集成和性能

DigiOps与人工智能 人工智能已经从一个未来主义的想法变成了改变全球行业的强大力量。人工智能驱动的解决方案正在改变医疗保健、金融、制造和零售等行业的企业运营方式。它们不仅提高了效率和准确性,还增强了决策能力。人工智能的价值不断增长,这从它处…

汽修行业的知识库搭建:赋能在线教育与知识付费

随着汽修行业的蓬勃发展,其业务范围和技术要求日益多元化。为了应对这一趋势,许多汽修公司开始探索线上教育模式,通过开设汽修知识课程,实现知识的有偿分享与传播。这一转变不仅拓宽了企业的盈利渠道,也为广大汽修爱好…

环境变量

见一见环境变量: 查看环境变量的命令 命令行: echo &PATH echo &HOME env ps ajx ps aux ps -f -o pid code.c中获取环境变量 main(char* env[]) char* getenv(env_name) 本地变量 shell…

腾讯云新开端口

检查防火墙设置 890 2024-09-30 20:47:18 netstat -tuln | grep 1213891 2024-09-30 20:47:49 ping 110.40.130.231892 2024-09-30 20:48:38 sudo firewall-cmd --zonepublic --add-port1213/tcp --permanent893 2024-09-30 20:48:51 sudo firewall-cmd --reload894 2024-…

[Everything] 文件搜索工具的下载及详细安装使用过程(附有下载文件)

快速搜索文件名及其所在路径 下载链接在文末 下载压缩包后解压 !!安装路径不要有中文 解压后得到文件 双击exe文件得到 选择简体中文,点击OK 点击“我接受” 更改安装目录,最好不要放在C盘,点击下一步 点击下一步 点…

动态时钟控件:Qt/C++ 项目代码解读

基于Qt的动态时钟控件项目。该项目展示了如何通过Qt的绘图系统绘制一个带有表盘背景、时针、分针、秒针、以及时间日期显示的时钟。同时,这个时钟控件支持背景切换,并且每秒钟刷新一次,实时显示当前时间。 项目结构与功能概述 该时钟控件主…

如何利用 StarRocks 加速 Iceberg 数据湖的查询效率

数据湖作为一种存储各种类型数据的集中式存储系统,以其灵活性、可扩展性和低成本的优势受到越来越多企业的青睐。然而,数据湖虽然降低了数据存储成本,但在数据分析尤其是实时数据分析场景下,其性能仍存在一定瓶颈。 本文将探讨如何…

Python的异步编程

什么是协程? 协程不是计算机系统提供,程序员人为创造。 协程也可以被称为微线程,是一种用户态内的上下文切换技术。简而言之,其实就是通过一个线程实现代码块相互切换执行。 实现协程有那么几种方法: greenlet&…

Windows——解除Windows系统中文件名和目录路径的最大长度限制

第一步:打开本地组策略编辑器 按下Win R键打开运行窗口,输入 gpedit.msc 并回车,打开本地组策略编辑器。 第二步:开启 长路径设置 第三步:重启计算机

全新带货思路,用AI美女数字人做情感赛道,27天销量1559单

本期就另外分享一个全新的AI美女数字人带货思路,如果你正好对AI视频带货感兴趣,那么本期内容直接给你抹平“视频号上AI美女数字人玩法信息差”,最主要还是趁这类内容还不卷的时候,赶紧行动起来! 更多实操教程和数字人工…

Paper解读:工作场所人机协作的团队形成:促进组织变革的目标编程模型

人工智能(AI)具有降低运营成本、提高效率和改善客户体验的潜力。 因此,在组织中组建项目团队至关重要,这样他们就会在决策过程中欢迎人工智能。 当前的技术革命要求公司快速变革,并增加了对团队在促进创新采用方面的作…

Chromium 屏蔽“缺少 Google API 密钥,因此 Chromium 的部分功能将无法使用。”提示 c++

新编译的Chromium工程默认gn参数如下: 可以利用gn args --list out/debug >1.txt 导出默认参数 google_api_key Current value (from the default) "" From //google_apis/BUILD.gn:43 Set these to bake the specified API keys and OAuth client …

【IT001】基于springboot+vue实现的在线问卷调查网站系统

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 项目描述 在当今信息爆炸的时代,数据收集与分析的重要…