RTP Payload Format for H.264 Vide(1)

news2025/4/19 1:56:50

摘要::

本备忘录描述了一种用于 ITU-T H.264 视频编码标准(与 ISO/IEC 国际标准 14496-10 技术上相同)的 RTP 负载格式,但不包括可伸缩视频编码(SVC)扩展和多视角视频编码(MVC)扩展,这两种扩展的 RTP 负载格式在其他文档中有定义。该 RTP 负载格式允许在每个 RTP 负载中封装一个或多个由 H.264 视频编码器产生的网络抽象层单元(NALU)。这种负载格式具有广泛的适用性,支持从简单的低比特率会话应用,到带有交错传输的互联网视频流,再到高比特率的视频点播等多种应用场景。

The H.264 Codec:

H.264 视频编码器具有非常广泛的应用范围,涵盖了各种形式的数字压缩视频,从低比特率的互联网流媒体应用,到高清电视(HDTV)广播和几乎无损编码的数字电影应用。与当前的技术水平相比,H.264 在整体性能方面表现优异,据报道其比特率节省可达到 50% 甚至更多。例如,据称数字卫星电视的画质可在 1.5 Mbit/s 的比特率下实现,而当前 MPEG-2 视频的典型比特率大约为 3.5 Mbit/s  。

编码规范在概念上将视频编码层(VCL)和网络抽象层(NAL)区分开来。VCL 包含编解码器的信号处理功能,包括变换、量化、运动补偿预测等机制,以及环路滤波器。它遵循当今大多数视频编解码器的一般概念:基于宏块的编码器,采用带有运动补偿的帧间预测和残差信号的变换编码。VCL 编码器输出的是切片(slice):即包含若干个宏块数据的比特串,以及切片头的信息(其中包含该切片中第一个宏块的空间地址、初始量化参数以及其他相关信息)。除非通过切片组(slice groups)的语法另作指定,否则切片中的宏块按扫描顺序排列。帧内预测仅在切片内部使用。更多信息可参考文献 。

NAL 编码器会将 VCL(视频编码层)编码器输出的切片封装成网络抽象层单元(NALU),以便适用于在分组网络中传输,或者用于面向分组的复用环境。H.264 标准的附录 B 定义了一种用于字节流导向网络(比如本地存储、串行传输等)上传输这些 NALU 的封装方法。但在本备忘录(即该 RTP 负载格式规范)的讨论范围内,附录 B 的内容并不适用或相关,因为 RTP 是基于分组的传输方式,而不是字节流方式。

在内部,NAL(网络抽象层)使用的是 NAL 单元。每个 NAL 单元由一个字节的头部和有效负载字节流组成。

每个 NAL 单元包含两个部分:

● 一个字节的头部(header):这个头部指出了 NAL 单元的类型(比如是帧、SPS、PPS 等),是否可能存在比特错误或语法错误,以及这个单元在解码过程中有多重要。

● 有效负载部分(payload):也就是实际的数据内容,比如一帧图像的数据.

头部指示该 NAL 单元的类型、有效负载中是否可能存在比特错误或语法违规,以及该 NAL 单元在解码过程中相对的重要性。本 RTP 负载规范在设计时并不关心 NAL 单元有效负载中的比特流内容。

H.264 的一个主要特点是:切片(slice)和图像的传输时间、解码时间以及采样或显示时间是完全解耦的。H.264 中规定的解码过程与时间无关,H.264 语法中也不携带类似于早期视频压缩标准中“时间参考(Temporal Reference)”那样表示跳帧数量的信息。此外,还有一些 NAL 单元会影响多帧图像,因此本质上不具备时间属性。因此,在处理 RTP 时间戳时,对于那些采样时间或显示时间未定义或在传输时尚未知的 NAL 单元,需要进行特别的处理和考虑。

Parameter Set Concept:

H.264 的一个非常基础的设计理念是生成自包含的分组,从而使诸如 RFC 4629 [11] 中的头部重复机制,或 MPEG-4 Visual 的头部扩展码(HEC)等机制变得不再必要。

这是通过将涉及多个切片的信息从媒体流中解耦来实现的。 这些高层的元信息应当以可靠的、异步的、提前的方式发送,与包含切片数据的 RTP 数据流分开进行传输。

(对于没有合适的带外传输通道的应用,也提供了带内发送该信息的机制。) 这一类高层参数的组合被称为参数集(parameter set)。H.264 规范中定义了两种参数集:

● 序列参数集(Sequence Parameter Set, SPS)

● 图像参数集(Picture Parameter Set, PPS)

一个活动的序列参数集在整个编码视频序列期间保持不变, 一个活动的图像参数集在一个编码图像内保持不变。

这些参数集结构中包含了如下信息:

● 图像大小

● 所使用的可选编码模式

● 宏块与切片组之间的映射关系等。

为了能够在无需与切片数据流同步传输参数集的情况下更改图像参数(例如图像大小),编码器和解码器可以各自维护一个包含多个序列和图像参数集的列表。每个切片头中都会包含一个码字,用于标识应该使用哪个序列参数集和图像参数集。这种机制允许将参数集的传输与视频数据包的传输分离,并可以通过外部手段进行传输(例如作为能力交换的一部分),或者通过可靠或不可靠的控制协议来发送。甚至在某些情况下,这些参数集可以完全不通过网络传输,而是在应用设计规范中预设并固定。

H.264 通过把编码参数信息(如分辨率、编码方式)从图像数据中剥离出来,形成独立的参数集,从而实现了数据包的自包含和高效传输。这些参数集不依赖 RTP 流,可以通过其他方式灵活传输或预设,大大增强了系统的适应性和效率。

Network Abstraction Layer Unit Types:

所有NAL单元都由一个单独的NAL单元类型字节组成,该字节同时也作为本RTP载荷格式的载荷头(payload header)。随后是对NAL单元载荷的描述。

NAL单元类型字节的语法和语义在h264官方文档中进行了规定,但其基本属性在下文中简要总结。NAL单元类型字节的格式如下:

+---------------+
 |0|1|2|3|4|5|6|7|
 +-+-+-+-+-+-+-+-+
 |F| NRI | Type  |
 +---------------+

根据H.264标准,对NAL单元类型字节各组成部分的语义简要说明如下:

● F:1位

forbidden_zero_bit。H.264标准中规定该位为1即为语法违规。

● NRI:2位

nal_ref_idc。值为 00 表示该NAL单元的内容不会用于重建参考图像,因此可以被丢弃而不会影响参考图像的完整性。值大于 00 表示该NAL单元的解码对保持参考图像的完整性是必要的。

● Type:5位

nal_unit_type。该字段表示NAL单元载荷的类型。

Definitions::

● 访问单元(access unit):一组NAL单元,总是包含一个主编码图像(primary coded picture)。除了主编码图像之外,访问单元还可以包含一个或多个冗余编码图像,或其他不包含片(slice)或编码图像的切片数据分区的NAL单元。访问单元的解码始终会产生一个解码图像。

● 编码视频序列(coded video sequence):按解码顺序排列的访问单元序列,由一个瞬时解码刷新(IDR)访问单元开始,后面跟着零个或多个非IDR访问单元,直到下一个IDR访问单元(不包括该IDR单元)为止。

● IDR访问单元(IDR access unit):其主编码图像是IDR图像的访问单元。

● IDR图像(IDR picture):仅包含I或SI片类型的编码图像,该图像会触发解码过程的“重置”。解码IDR图像之后,其后的所有编码图像都可以在无需对IDR图像之前的图像进行帧间预测的情况下完成解码。

● 主编码图像(primary coded picture):H.264标准中用于解码处理的图像编码表示。主编码图像包含图像的所有宏块(macroblock)。

● 冗余编码图像(redundant coded picture):图像或图像部分的编码表示。对于符合H.264标准的码流,解码过程不会使用冗余编码图像的内容。但在存在错误或丢包的码流中,冗余编码图像的内容可用于解码处理。

● VCL NAL单元(VCL NAL unit):用于统称编码片(coded slice)和编码数据分区(coded data partition)类型的NAL单元。

此外,以下定义也适用:

● 解码顺序号(decoding order number, DON):RTP负载结构中的一个字段,或一个表示NAL单元解码顺序的派生变量。DON的取值范围为0到65535。当达到最大值后,会回绕至0。

● NAL单元解码顺序(NAL unit decoding order):符合文献 [1] 第7.4.1.2节所述顺序约束的NAL单元顺序。

● NALU时间(NALU-time):如果NAL单元被传输在其独立的RTP包中,该值表示RTP时间戳应取的值。

● 传输顺序(transmission order):按RTP序列号升序排列的数据包顺序(按模算术处理)。在聚合包中,NAL单元的传输顺序与其在包中出现的顺序一致。

● 媒体感知网络元素(media-aware network element, MANE):如中间设备或应用层网关这类网络元素,能够解析RTP载荷头或RTP载荷的某些部分,并对内容做出反应。

说明性注释:MANE的概念超越了普通路由器或网关,因为MANE需要了解信令(例如,获取媒体流的负载类型映射信息),并且在使用安全实时传输协议(SRTP)时需要被信任。使用MANE的好处是可以根据媒体编码的需要丢弃数据包。例如,在某个链路上因拥塞而必须丢包时,MANE可以识别并丢弃对用户体验影响最小的数据包。

● 静态宏块(static macroblock):视频流中某些宏块可被定义为静态块,详见文献 [3] 第8.3.2.8节。静态宏块可释放出额外的处理资源用于非静态宏块处理。在一定视频处理资源和分辨率条件下,静态宏块数量越多,帧率越高。

● 默认子配置(default sub-profile):编码工具的子集,可以是一个profile的全部编码工具,也可以是多个profile共有的编码工具子集,由 profile-level-id 参数指示。

● 默认等级(default level):由 profile-level-id 参数指示的等级,由三个字节组成:profile_idc、profile-iop 和 level_idc。默认情况下,level_idc 表示等级,在某些情况下还需结合 profile-iop 一起判断。

Abbreviations:

● DON:解码顺序号(Decoding Order Number)

● DONB:解码顺序号基值(Decoding Order Number Base)

● DOND:解码顺序号差值(Decoding Order Number Difference)

● FEC:前向纠错(Forward Error Correction)

● FU:分片单元(Fragmentation Unit)

● IDR:瞬时解码刷新(Instantaneous Decoding Refresh)

● IEC:国际电工委员会(International Electrotechnical Commission)

● ISO:国际标准化组织(International Organization for Standardization)

● ITU-T:国际电信联盟 电信标准化部门(International Telecommunication Union, Telecommunication Standardization Sector)

● MANE:媒体感知网络元素(Media-Aware Network Element)

● MTAP:多时间聚合包(Multi-Time Aggregation Packet)

● MTAP16:带有16位时间戳偏移的MTAP(MTAP with 16-bit timestamp offset)

● MTAP24:带有24位时间戳偏移的MTAP(MTAP with 24-bit timestamp offset)

● NAL:网络提取层(Network Abstraction Layer)

● NALU:NAL单元(NAL Unit)

● SAR:采样宽高比(Sample Aspect Ratio)

● SEI:补充增强信息(Supplemental Enhancement Information)

● STAP:单时间聚合包(Single-Time Aggregation Packet)

● STAP-A:STAP类型A

● STAP-B:STAP类型B

● TS:时间戳(Timestamp)

● VCL:视频编码层(Video Coding Layer)

● VUI:视频可用性信息(Video Usability Information)

参考来源:

https://www.yuque.com/u2132176/yfiyal/kbobkofh66aldrg7

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

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

相关文章

我为女儿开发了一个游戏网站

大家好,我是星河。 自从协助妻子为女儿开发了算数射击游戏后,星河就一直有个想法:为女儿打造一个专属的学习游戏网站。之前的射击游戏虽然有趣,但缺乏难度分级,无法根据女儿的学习进度灵活调整。而且,仅仅…

【Spring Cloud Netflix】GateWay服务网关

1.基本概述 GateWay用于在微服务架构中提供统一的入口点,对请求进行路由,过滤和处理。它就像是整个微服务系统的大门,所有外部请求都要通过它才能访问到后端的各个微服务。 2.核心概念 2.1路由(Route) 路由是Spring Cloud gateWay中最基本…

Docker部署Jenkins服务

文章目录 1.下载Jenkins服务2.部署Java21(可选)2.1 安装Java21 3.Maven3.9.9安装4.启动Jenkins5.初始化Jenkins5.1 入门5.2 安装推荐的插件5.3 创建第一个管理员用户5.4 实例配置5.5 Jenkins已就绪5.6 开始使用Jenkins5.7 重启Jenkins 6.配置Jenkins6.1 …

[ctfshow web入门] web40

信息收集 怎么一下子多这么多过滤啊,我以为跳过了好几题 这又能eval了,但是连$也不能用了 不能用. * ?,所以打不出fla*或者fla?????了 不能用/,构造不出日志注入和伪协议包含 仔细观察,禁的是中文的括号&#x…

蓝桥杯c ++笔记(含算法 贪心+动态规划+dp+进制转化+便利等)

蓝桥杯 #include <iostream> #include <vector> #include <algorithm> #include <string> using namespace std; //常使用的头文件动态规划 小蓝在黑板上连续写下从 11 到 20232023 之间所有的整数&#xff0c;得到了一个数字序列&#xff1a; S12345…

Qt问题之 告别软件因系统默认中文输入法导致错误退出的烦恼

1. 问题 使用Qt进行研发时&#xff0c;遇到一个问题&#xff0c;当在系统默认输入法中文&#xff08;英文输入法或者搜狗就不会触发闪退&#xff09;的情况下&#xff0c;选中QTableWidget控件&#xff08;QTableWidgetItem有焦点&#xff0c;但是不双击&#xff09;&#xff…

AlDente Pro for Mac电脑 充电限制保护工具

AlDente Pro for Mac电脑 充电限制保护工具 一、介绍 AlDente Pro for Mac&#xff0c;是一款充电限制保护工具&#xff0c;是可以限制最大充电百分比来保护电池的工具。锂离子和聚合物电池&#xff08;如 MacBook 中的电池&#xff09;在40&#xff05; 至 80&#xff05; 之…

算法训练之动态规划(一)

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

Navicat连接远程PostGreSQL失败

问题描述 使用本地Navicat连接Windows远程服务器上部署的PostGreSQL数据库时,出现以下错误: 解决方案 出现以上报错信息,是因为PostGreSQL数据库服务尚未设置允许客户端建立远程连接。可做如下配置, 1. 找到PostGreSQL数据库安装目录下的data子文件夹,重点关注:postgres…

新一代达梦官方管理工具SQLark:可视化建表操作指南

在数据库管理工作中&#xff0c;新建表是一项基础且频繁的操作。SQLark 的可视化建表功能为我们提供了一种高效、便捷且丝滑流畅的建表新体验。一起来了解下吧。 SQLark 官方下载链接&#xff1a;www.sqlark.com 新建表作为常见的功能&#xff0c;相比其他管理工具&#xff0c;…

什么是EXR透视贴图 ?

EXR透视贴图是一种基于 OpenEXR 格式的高动态范围&#xff08;HDR&#xff09;图像技术&#xff0c;主要用于3D建模、渲染和视觉特效领域。它通过高精度图像数据和透视映射功能&#xff0c;为场景创建逼真的光影效果和空间深度。 技术原理 高动态范围&#xff08;HDR&#xf…

每日一题(小白)数组娱乐篇21

由于题意可知我们是要将对应的数字转换为英文&#xff0c;我们要考虑两点一个是进制的转换&#xff0c;也就是类似于我们的十进制一到9就多一位&#xff0c;这里的进制就是Z进制也就是27进制一旦到26下一位则进位&#xff1b;另一方面要考虑数字的转换也就是1~26对应A~Z。解决上…

LINUX的使用(1)-挂载云硬盘

1.磁盘的挂载&#xff1a; 这个输出是来自 fdisk 或类似的工具&#xff0c;它展示了两块磁盘的分区信息。让我们逐个分析&#xff1a; 第一块磁盘 /dev/sda: 磁盘大小: 53.7 GB (约 53687091200 字节)&#xff0c;总共有 104857600 个扇区。扇区单位: 每个扇区大小为 512 字节…

GPT-4o-image模型:开启AI图片编辑新时代

在生成式AI技术爆发式迭代的今天&#xff0c;智创聚合API率先突破多模态创作边界&#xff0c;正式发布集成GPT-4o-image模型的创作平台&#xff0c;以“文生图-图生图-循环编辑”三位一体的技术矩阵&#xff0c;重新定义数字内容生产流程。生成图像效率较传统工具提升300%&…

使用pip3安装PyTorch与PyG,实现NVIDIA CUDA GPU加速

使用python3的pip3命令安装python依赖库。 # python3 -V Python 3.12.3 # # pip3 -V pip 25.0.1 from /root/.pyenv/versions/3.12.3/lib/python3.12/site-packages/pip (python 3.12)Usage: pip3 install [options] <package> ...pip3 install [options] -r <re…

Rust主流框架性能比拼: Actix vs Axum vs Rocket

本内容是对知名性能评测博主 Anton Putra Actix (Rust) vs Axum (Rust) vs Rocket (Rust): Performance Benchmark in Kubernetes 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在以下中&#xff0c;我们将比较 Rust 生态中最受欢迎的几个框架。我会将三个应用程序…

【QT】QT的消息盒子和对话框(自定义对话框)

QT的消息盒子和对话框&#xff08;自定义对话框&#xff09; 一、消息盒子QMessageBox1、弹出警告盒子示例代码&#xff1a;现象&#xff1a; 2、致命错误盒子示例代码&#xff1a;现象&#xff1a; 3、帮助盒子示例代码&#xff1a;现象&#xff1a; 4、示例代码&#xff1a; …

【结合vue源码,分析vue2及vue3的数据绑定实现原理】

结合vue源码&#xff0c;分析vue2及vue3的数据绑定实现原理 Vue 2 数据绑定实现整体思路详细实现1. Observer 类&#xff1a;数据劫持2. Dep 类&#xff1a;依赖收集3. Watcher 类&#xff1a;订阅者 Vue 3 数据绑定实现整体思路详细实现1. reactive 函数&#xff1a;创建响应式…

如何实现H5端对接钉钉登录并优雅扩展其他平台

如何实现H5端对接钉钉登录并优雅扩展其他平台 钉钉H5登录逻辑后端代码如何实现&#xff1f;本次采用策略模式工厂方式进行定义接口确定会使用的基本鉴权步骤具体逻辑类进行实现采用注册表模式&#xff08;Registry Pattern&#xff09;抽象工厂进行基本逻辑定义具体工厂进行对接…

LabVIEW真空度监测与控制系统

开发了一种基于LabVIEW的真空度信号采集与管理系统&#xff0c;该系统通过图形化编程语言实现了真空度的高精度测量和控制。利用LabVIEW的强大功能&#xff0c;研制了相应的硬件并设计了完整的软件解决方案&#xff0c;以满足工业应用中对真空度监测的精确要求。 项目背景 随着…