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.rhkb.cn/news/436901.html

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

相关文章

Linux 实用工具Axel安装及使用教程(支持多线程下载)

一、Axel 简介 Axel 是一个轻量级的命令行下载加速器,旨在提高文件下载速度。 多线程下载: Axel 可以同时使用多个连接来下载文件,从而加快下载速度。断点续传: 支持中断后继续下载,避免重新开始下载整个文件。轻量级: 资源占用少&#xff0c…

YOLOv1–v11: 版本演进及其关键技术解析

最新消息:Yolo11发布最新版本2024.10 YOLO (You Only Look Once) 是一种高效的目标检测算法,自其初代发布以来,经过多次迭代,逐步提升了检测速度和精度。本文将详细介绍 YOLO 从 v1 到 v11 的各个版本,涵盖每个版本的发…

谨防火灾!电瓶车检测算法助力城市/小区/园区多场景安全管理精细化、智能化

随着人工智能技术的快速发展,AI智能分析网关V4在电瓶车检测领域的应用日益广泛。这一技术通过深度学习、计算机视觉等先进算法,实现了对电瓶车及其相关行为的智能识别和分析,为电瓶车的管理和应用提供了强大的技术支持。 一、电瓶车检测算法…

测试用例的进阶二

1. 按开发阶段划分 1.1 测试金字塔 从上到下,对于测试人员代码就是要求越来越低; 从下到上,越来越靠近用户; 从下到上,定位问题的成本越来越高; 1.2 单元测试(Unit Testing) 单元测试是对软件组成单元进…

1.8 物理层下的传输媒体

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 1 导引型传输媒体1.1 双绞线1.2 同轴电缆1.3 光缆 2 非导引型传输媒体2.1 无线电微波通信2.2 多径效应2.3 卫星通信2.4 无线局域网 在数据通信系统中,传输媒体是发…

在线PDF怎么转换成JPG图片?分享14种转换操作!

作为一名社畜,俺也经常要将PDF转换为图片格式! 如何进行快速转换,包括电脑端、在线端和手机端,今天俺就测评了50款工具,给你得出了下面这些渠道,不少也是免费的,相信对你有帮助哦! …

25考研咨询周开启,西安电子科技大学是否改考408??

学长这几天帮大家问了西安电子科技大学是否会从833、834、953改考为408? 西电老师回复:根据上级文件要求,招生简章以及专业目录会在网上报名开始前公布,专业课不会又大变动! 因为大家安心复习即可,保证今…

Python 基于 flask 的前程无忧招聘可视化系统,Python大数据招聘爬虫可视化分析

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

谷歌网站收录查询,帮助您快速准确地查询网站在谷歌的收录情况的3个方法

谷歌网站收录查询,帮助您快速准确地查询网站在谷歌的收录情况的3个方法。 一、使用GoogleSearchConsole(谷歌搜索控制台) 1.注册并验证网站 -首先,确保您的网站已注册并验证在GoogleSearchConsole中。这是一个免费的工具&…

2-109 基于matlab-GUI的BP神经网络

基于matlab-GUI的BP神经网络,10种不同分布的数据样本,9种不同的激活函数,可更改升级网络结构参数,对比各种方法参数下的训练测试效果,实时显示预测过程。程序已调通,可直接运行。 下载源程序请点链接&…

C++ 游戏开发

C游戏开发 C 是一种高效、灵活且功能强大的编程语言,因其性能和控制能力而在游戏开发中被广泛应用。许多著名的游戏引擎,如 Unreal Engine、CryEngine 和 Godot 等,都依赖于 C 进行核心开发。本文将详细介绍 C 在游戏开发中的应用&#xff0…

ireport 5.1 中文生辟字显示不出来,生成PDF报字体找不到

ireport生成pdf里文字不显示。本文以宋体中文字不显示为例。 问题:由浅入深一步一步分析 问题1、预览正常,但生成pdf中文不显示 报告模板编辑后,预览正常,但生成pdf中文不显示。以下是试验过程: 先编辑好一个报告单模…

苹果荔枝柠檬梨柿子数据集 水果数据集 树上1500张 带标注 voc yolo 5类

苹果荔枝柠檬梨柿子数据集 水果数据集 树上1500张 带标注 voc yolo 5类 苹果荔枝柠檬梨柿子数据集 名称 苹果荔枝柠檬梨柿子数据集 (Apple, Litchi, Lemon, Pear, Persimmon Dataset) 规模 图像数量:1498张图像。类别:5种水果类别。标注个数&#xff…

成都网安周暨CCS2024 | 大模型安全与产业应用创新研讨活动成功举办

9月11日-12日,作为2024年国家网络安全宣传周成都系列活动的重磅活动之一,CCS 2024成都网络安全系列活动在成都举行。“大模型安全与产业应用创新研讨活动”同期举办,本场活动由百度安全、成都无糖信息联合承办,特邀云安全联盟CSA大…

数据权限的设计与实现系列11——前端筛选器组件Everright-filter集成功能完善2

‍ 筛选条件数据类型完善 文本类 筛选器组件给了一个文本类操作的范例,如下: Text: [{label: 等于,en_label: Equal,style: noop},{label: 等于其中之一,en_label: Equal to one of,value: one_of,style: tags},{label: 不等于,en_label: Not equal,v…

Gin框架简易搭建(3)--Grom与数据库

写在前面 项目地址 个人认为GORM 指南这个网站是相比较之下最为清晰的框架介绍 但是它在环境搭建阶段对于初学者而言不是很友好,尤其是使用mysql指令稍有不同,以及更新的方法和依赖问题都是很让人头疼的,而且这些报错并非逻辑上的&#xf…

【Redis】如何在 Ubuntu 上安装 Redis 5

🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 本期内容主要介绍如何在 Ubuntu 上安装 Redis5 一些碎碎念: 本来这期内容介绍如何在 Centos 安装 Redis …

TypeScript 设计模式之【状态模式】

文章目录 状态模式:优雅切换的交通信号灯状态模式的奥秘状态模式有什么利与弊?如何使用状态模式来优化你的系统代码实现案例状态模式的主要优点状态模式的主要缺点状态模式的适用场景总结 状态模式:优雅切换的交通信号灯 当你站在繁忙的十字路口&#…

Android AMS介绍

注:本文为作者学习笔记,如有误,请各位大佬指点 系统进程运行环境的初始化 Context是一个抽象类,它可以访问application环境的全局信息和各种资源信息和类 context功能: 对Activity、Service生命周期的管理通过Intent发…

Rust 语言开发 ESP32C3 并在 Wokwi 电子模拟器上运行(esp-hal 非标准库、LCD1602、I2C)

文章目录 esp-rs 简介GithubRust 包仓库Rust 教程Wokwi 电子模拟器开发环境Rust 环境esp-rs 环境创建 ESP32C3 项目项目结构编译项目命令运行模拟器ESP32C3 烧录 esp-rs 简介 esp-rs 是一个专注于为 Espressif 系列芯片(如 ESP32、ESP32-S2、ESP32-C3 等&#xff0…