音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介

一、引言

RTP封装H.264时,RTP对NALU Header的nal_unit_type附加了扩展含义。

由《音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道,nal_unit_type表示NALU的类型,在H.264官方文档《T-REC-H.264-202108-I!!PDF-E.pdf》第65页定义为:

二、NAL Unit Type

在RTP封包中,nal_unit_type被附加了扩展含义。根据《RFC 6184》第13页:

可以看到值为1 - 23的nal_unit_type为原H.264中规定的类型,24 - 31为RTP扩展的类型。扩展的类型包括STAP-A、STAP-B、MTAP16、MTAP24、FU-A、FU-B。

三、Decoding Order Number (DON)

根据《RFC 6184》第17页,在interleaved packetization mode(交错分组模式)中,允许NAL单元的传输顺序与NAL单元的解码顺序不同。Decoding Order Number(解码顺序号 ,DON)是有效载荷结构或派生变量中的一个字段,表示NAL单元的解码顺序。传输和解码顺序的耦合由可选的sprop-interleaving-depth媒体类型参数控制,具体如下:

当可选的sprop-interleaving-depth媒体类型参数的值等于 0(显式或默认值)时,NAL单元的传输顺序必须与 NAL 单元的解码顺序一致;当可选的sprop-interleaving-depth媒体类型参数的值大于0 时:MTAP16和MTAP24中NAL单元的顺序不需要是NAL单元解码顺序,通过在两个连续数据包中去包STAP-B、MTAP和FU生成的NAL单元的顺序不需要是NAL单元解码顺序:

四、Single-time aggregation packet(STAP)

根据《RFC 6184》第22页,当 NAL单元聚合在一起且共享相同的NALU时间时,应使用单时聚合数据包(STAP,Single-time aggregation packet

(一)STAP-A

STAP-A(STAP type A)的有效载荷不包括DON,至少由一个single-time aggregation units(单时聚合单元)组成。如下图所示

single-time aggregation units(单时聚合单元)由 16 位无符号大小信息(按网络字节顺序排列)组成,以字节为单位表示后面NAL单元的大小(不包括这两个八位位组,但包括 NAL单元的NAL 单元类型八位位组),后面是NAL单元本身,包括其 NAL 单元类型字节。单时聚合单元在 RTP 有效载荷内按字节对齐,但不一定按 32 位字边界对齐。下图显示了单时聚合单元的结构:

下图展示了一个包含 STAP-A 的 RTP 数据包示例。STAP 包含两个单时聚合单元,在图中分别标为1和2:

(二)STAP-B

STAP-B(STAP type B)的有效载荷包括一个16位无符号解码顺序号 (DON)(按网络字节顺序排列)和至少一个single-time aggregation units(单时聚合单元):

DON 字段按传输顺序指定 STAP-B 中第一个 NAL 单元的DON值。对于 STAP-B 中按出现顺序连续出现的每个 NAL 单元,DON 值 =(STAP-B中前一个NAL单元的DON 值 + 1)% 65536,其中“%”表示模乘运算。

下图展示了一个包含 STAP-B 的 RTP 数据包示例。STAP 包含两个单时聚合单元,在图中分别标为 1 和 2:

五、Multi-Time Aggregation Packet(MTAP)

MTAP(Multi-Time Aggregation Packet,多时聚合包) 的NAL单元有效载荷包括一个16位无符号解码顺序号基 (DONB)(按网络字节顺序排列)和一个或多个多时间聚合单元,如下图所示。DONB必须包含MTAP NAL单元解码顺序中第一个NAL单元的DON值。说明:NAL 单元解码顺序中的第一个 NAL 单元不一定是 MTAP 中 NAL 单元封装顺序中的第一个 NAL 单元:

《RFC 6184》定义了两种不同的多时间聚合单元。它们都由以下 NAL 单元的 16 位无符号大小信息(按网络字节顺序)、8 位无符号解码顺序号差值(DOND)和该 NAL 单元的 n 位时间戳偏移(TS 偏移)(按网络字节顺序)组成,其中 n 可以是 16 位或 24 位。不同 MTAP 类型(MTAP16 和 MTAP24)之间的选择取决于应用:时间戳偏移越大,MTAP 的灵活性越高,但开销也越大。

MTAP16的多时间聚合单元结构如下图所示:

MTAP24的多时间聚合单元结构如下图所示:

数据包内聚合单元的起始或终止位置不要求在 32 位字边界上。多时间聚合单元中包含的 NAL 单元的 DON 等于 (DONB + DOND) % 65536,其中 % 表示取模运算。本备忘录未说明 MTAP 中的 NAL 单元如何排序,但在大多数情况下,应使用 NAL 单元解码顺序。

时间戳偏移字段必须设置为等于以下公式的值:如果 NALU 时间大于或等于数据包的 RTP 时间戳,则时间戳偏移 = (NAL 单元的 NALU 时间 - 数据包的 RTP 时间戳)。
 如果 NALU 时间小于数据包的 RTP 时间戳,则时间戳偏移等于 NALU 时间 + (2^32 - 数据包的 RTP 时间戳)。

对于 MTAP 中的 “最早 ”多时间聚合单元,时间戳偏移必须为零。因此,MTAP 本身的 RTP 时间戳与最早的 NALU 时间相同。

参考说明:“最早 ”的多时间聚合单元是指如果聚合单元中包含的 NAL 单元封装在单个 NAL 单元数据包中,在 MTAP 的所有聚合单元中具有最小扩展 RTP 时间戳的单元。扩展时间戳是一种时间戳,它的位数超过 32 位,并能计算时间戳字段的缠绕,因此能确定时间戳缠绕时的最小值。这种 “最早 ”的聚合单元可能不是 MTAP 中聚合单元封装顺序中的第一个。最早 "的 NAL 单元也不必与 NAL 单元解码顺序中的第一个 NAL 单元相同。

下图展示了一个包含 MTAP16 类型的多时间聚合数据包的 RTP 数据包示例,该数据包包含两个多时间聚合单元,在图中标注为 1 和 2:

下图展示了一个包含 MTAP24 类型的多时间聚合数据包的 RTP 数据包示例,该数据包包含两个多时间聚合单元,在图中标注为 1 和 2:

六、Fragmentation Units (FUs)

根据《RFC 6184》第29页,这种有效载荷类型允许将一个 NAL 单元分割成多个 RTP 数据包。在应用层而不是依靠低层分片(如 IP)这样做有以下优点:

该有效载荷格式能够在 IPv4 网络上传输大于 64 kbytes 的 NAL 单元,而这些 NAL 单元可能存在于预先录制的视频中,尤其是高清格式中(每幅图像的切片数有限制,这导致每幅图像的 NAL 单元数有限制,从而可能产生较大的 NAL 单元)。

分片机制允许对单个 NAL 单元进行分片,并前向纠错。

片段只针对单个 NAL 单元,而不针对任何聚合数据包。一个 NAL 单元的片段由该 NAL 单元的整数个连续八位位组组成。NAL 单元的每个八位字节必须恰好是该 NAL 单元的一个片段的一部分。
 同一 NAL 单元的片段必须以升序 RTP 序列号连续发送(在第一个片段和最后一个片段之间不发送同一 RTP 数据包流中的其他 RTP 数据包)。同样,一个 NAL 单元必须按 RTP 序列号顺序重新组装。

当一个 NAL 单元被分片并在分片单元 (FUs) 内传送时,它被称为分片 NAL 单元。STAP 和 MTAP 不得分片。FU 不得嵌套;也就是说,一个 FU 不得包含另一个 FU。

携带 FU 的 RTP 数据包的 RTP 时间戳被设置为分片 NAL 单元的 NALU 时间。
下图显示了 FU-A 的 RTP 有效载荷格式。FU-A 由一个八位位组的碎片单元指示符(FU indicator)、一个八位位组的碎片单元报头(FU header)和一个碎片单元(fragmentation unit  payload)有效载荷组成:

下图显示了 FU-B 的 RTP 有效载荷格式。FU-B 由一个八位位组的片段单元指示符(FU indicator)、一个八位位组的片段单元头(FU header)、一个解码顺序号(DON)(按网络字节顺序)和一个片段单元有效载荷(FU payload)组成。换句话说,FU-B 的结构与 FU-A 的结构相同,只是多了一个 DON 字段:

在interleaved packetization mode(交错分组模式)中,NAL 单元类型 FU-B 必须用于分片 NAL 单元的第一个分片单元。在任何其他情况下都不得使用 NAL 单元类型 FU-B。换句话说,在交错分组模式下,每个被分片的 NALU 的第一个分片都是 FU-B,然后是一个或多个 FU-A 分片。
 FU 指示符八位位组的格式如下:

FU 指示符八位位组类型字段 28 和 29 的值分别标识 FU-A 和 FU-B。NRI 字段的值必须根据分片 NAL 单元中 NRI 字段的值设置。
 FU 头的格式如下:

其中:

S:占1位。当设置为 1 时,起始位表示分片 NAL 单元的起始位置。当下面的 FU 有效载荷不是片段 NAL 单元有效载荷的开始时,开始位设为 0。

E:占1位。当设置为 1 时,End 位表示分片 NAL 单元的结束,即有效载荷的最后一个字节也是分片 NAL 单元的最后一个字节。当后续 FU 有效载荷不是片段 NAL 单元的最后一个片段时,End 位被置 0。

R:占1位。保留位必须等于 0,且必须被接收器忽略。

Type:占5位。下图中定义的 NAL 单元有效载荷类型:


 说明:FU-Bs 中的 DON 字段允许网关将 NAL 单元分片到 FU-Bs,而无需按照 NAL 单元解码顺序组织传入的 NAL 单元。

片段 NAL 单元不得在一个 FU 中传输;也就是说,在同一个 FU 标头中,开始位和结束位不得同时置 1。
 FU 有效载荷由片段 NAL 单元有效载荷的片段组成,这样,如果连续 FU 的片段单元有效载荷按顺序连接起来,就可以重建片段 NAL 单元的有效载荷。碎片 NAL 单元的 NAL 单元类型八位位组不包含在碎片单元有效载荷中,而是在碎片单元 FU 指示符八位位组的 F 和 NRI 字段以及 FU 标头的类型字段中传达碎片 NAL 单元的 NAL 单元类型八位位组信息。FU 有效载荷可以有任意数量的八位位组,也可以是空的。

说明:空 FU 允许在几乎无损的环境中减少某类发送方的延迟。这些发送方的特点是,他们在 NALU 完全生成之前,也就是在知道 NALU 大小之前,就将 NALU 片段打包。如果不允许使用零长度的 NALU 片段,发送者就必须在发送当前片段之前生成至少一个比特的下一个片段数据。由于 H.264 的特点,有时几个宏块占用的比特为零,这种情况并不可取,而且会增加延迟。不过,在使用零长度 NALU 片段(可能)时,应仔细权衡因传输时使用额外数据包而增加的至少部分 NALU 丢失风险。

 如果一个分片单元丢失,接收方应按照传输顺序丢弃与同一分片 NAL 单元相对应的所有后续分片单元。端点或 MANE 中的接收方可将 NAL 单元的前 n 1 个片段聚合为一个(不完整的)NAL 单元,即使未收到该 NAL 单元的 n 个片段。在这种情况下,NAL 单元的 forbidden_zero_bit 必须设为 1,以表示语法违规。

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

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

相关文章

智慧园区后勤单位消防安全管理:安全运营和安全巡检

//智慧园区消防管理困境大曝光 智慧园区,听起来高大上,但消防管理却让人头疼不已。各消防子系统各自为政,像一座座孤岛,信息不共享、不协同。 消防设施管理分散,不同区域、企业的设备标准不一样,维护情况…

RAG(检索增强生成)原理、实现与评测方法探讨

RAG是什么? 看一下RAG的英文全称:Retrieval-Augmented Generation,建索、增强、生成;一句话串起来就是通过检索增强模型的生成,是的,这就是RAG。 RAG怎么做? 目前比较通用的套路是这样的&#x…

表单制作代码,登录动画背景前端模板

炫酷动效登录页 引言 在网页设计中,按钮是用户交互的重要元素之一。一个炫酷的按钮特效不仅能提升用户体验,还能为网页增添独特的视觉吸引力。今天,我们将通过CSS来实现一个“表单制作代码,登录动画背景前端模板”。该素材呈现了数据符号排版显示出人形的动画效果,新颖有…

HBuilder X安装教程(2025版)

一,官网下载最新包: 官网链接:HBuilderX-高效极客技巧 等待工具包,下载好。 二,安装打开工具: 把HBuilderX压缩包进行压缩,然后打开压缩后的文件夹

【算法系列】希尔排序算法

文章目录 希尔排序算法:一种高效的排序方法一、基本思想二、实现步骤1. 初始化增量2. 分组与排序3. 缩小增量4. 最终排序 三、代码实现四、增量序列的选择1. Shell增量序列2. Hibbard增量序列3. Sedgewick增量序列 五、时间复杂度六、总结 希尔排序算法:…

VMware虚拟机Mac版安装Win10系统

介绍 Windows 10是由美国微软公司开发的应用于计算机和平板电脑的操作系统,于2015年7月29日发布正式版。系统有生物识别技术、Cortana搜索功能、平板模式、桌面应用、多桌面、开始菜单进化、任务切换器、任务栏的微调、贴靠辅助、通知中心、命令提示符窗口升级、文…

android keystore源码分析

架构 Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元,以便使用访问受控且由硬件支持的密钥实现相关协议。 Keymaster HAL 是由原始设备制造商 (OEM) 提供的动态加载库,密钥库服务使用它来提供由硬件支持的加密服…

视频字幕识别和翻译

下载的视频很多不是汉语的,我们需要用剪映将语音识别出来作为字幕压制到视频中去。 剪映6.0以后语音识别需要收费,但是低版本还是没有问题。 如果想要非汉语字幕转成中文,剪映低版本不提供这样功能。但是,用剪映导出识别字幕&am…

Rust语言基础知识详解【一】

1.在windows上安装Rust Windows 上安装 Rust 需要有 C 环境,以下为安装的两种方式: 1. x86_64-pc-windows-msvc(官方推荐) 先安装 Microsoft C Build Tools,勾选安装 C 环境即可。安装时可自行修改缓存路径与安装路…

mapbox基础,使用geojson加载fill-extrusion三维填充图层

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️fill-extrusion三维填充图层样式二、�…

用Python3脚本实现Excel数据到TXT文件的智能转换:自动化办公新姿势

文章目录 用Python3实现Excel数据到TXT文件的智能转换:自动化办公新姿势场景应用:为什么需要这种转换?技术解析:代码实现详解核心代码展示改进点说明 实战演练:从Excel到TXT的完整流程准备数据示例(data.xl…

llaMa模型的创新

LLaMa介绍 LLaMa是基于transformer encoder的生成式模型。 目前有:LLAMA, LLAMA2, LLAMA3 三个大的版本 论文 LLAMA 2: Open Foundation and Fine-Tuned Chat Models: https://arxiv.org/pdf/2307.09288 LLAMA 3: The Llama 3 Herd of Models https…

神经网络 - 激活函数(Sigmoid 型函数)

激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质: (1) 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数. (2) 激活函数及其导函数要尽可能的简单&#xff0…

PINN求解固体力学问题——论文加代码

PINN求解固体力学问题——论文加代码 1. 训练2. 可视化论文:Physics-Informed Deep Learning and its Application in Computational Solid and Fluid Mechanics 基本问题: 网格: 1. 训练 # %load Plane_Stress_W-PINNs.py """ Forward Problem for Plan…

ktransformers 上的 DeepSeek-R1 671B open-webui

ktransformers 上的 DeepSeek-R1 671B open-webui 一、下载GGUF模型1. 创建目录2. 魔塔下载 DeepSeek-R1-Q4_K_M3. 安装显卡驱动和cuda4. 显卡 NVIDIA GeForce RTX 4090 二、安装ktransformers1. 安装依赖2. 安装uv工具链3. 下载源码4. 创建python虚拟环境 三、编译ktransforme…

QT:Graphics View的坐标系介绍

在 Qt 的 Graphics View 框架中,存在三种不同的坐标系,分别是 物品坐标系(Item Coordinates)、场景坐标系(Scene Coordinates) 和 视图坐标系(View Coordinates)。这三种坐标系在图形…

医院HIS接入大模型:算力基础设施与训练能力的深度剖析与测算

一、引言 1.1 研究背景与意义 在数字化医疗快速发展的当下,医院信息系统(Hospital Information System,HIS)作为医疗信息化的核心枢纽,承载着患者诊疗信息、医院运营管理等关键数据 ,对提升医疗服务质量、优化医院管理流程起着至关重要的作用。然而,传统 HIS 在面对日…

入门网络安全工程师要学习哪些内容【2025年寒假最新学习计划】

🤟 基于入门网络安全/黑客打造的:👉黑客&网络安全入门&进阶学习资源包 大家都知道网络安全行业很火,这个行业因为国家政策趋势正在大力发展,大有可为!但很多人对网络安全工程师还是不了解,不知道网…

阿里云CDN转https个人测试证书过期更换

网站是http的虚拟主机,微信小程序要求https,所以申请了阿里云CDN和个人测试证书(以前叫免费证书),把http转成https。 但是个人测试证书只有三个月有效期,所以每隔三个月要手动申请更换一次。 在阿里云CDN…

东信营销科技巨额补贴仍由盈转亏:毛利率大幅下滑,现金流告急

《港湾商业观察》施子夫 近期,东信营销科技有限公司(以下简称,东信营销科技)递表港交所,联席保荐机构为海通国际和中银国际。 东信营销科技的国内运营主体为深圳市东信时代信息技术有限公司。尽管期内收入规模有所提…