H264三种RTP打包方式

1. 单一NALU模式

单一NALU模式

适用于小于MTU(最大传输单元)的NALU。这种模式下,一个RTP包包含一个完整的NALU。RTP头部之后紧跟着NALU头和NALU数据。

封装格式

RTP头 | NALU头 | NALU数据

这种方式简单直接,但仅适用于较小的NALU。

2. 组合帧封装模式

组合帧封装模式适用于多个小NALU的组合传输。常用的类型是STAP-A(单时间聚合包)。这种模式下,一个RTP包可以包含多个NALU,适合传输多个小NALU以提高传输效率。

STAP-A封装格式

  • RTP头:包含标识、序列号、时间戳等信息。
  • STAP-A头:表示这是一个STAP-A包。
  • NALU头和数据:包含多个NALU,每个NALU都有自己的头和数据。
RTP头 | STAP-A头 | NALU1头 | NALU1数据 | NALU2头 | NALU2数据 | ...

这种方式在传输多个小NALU时非常高效。

3. 分片封装模式

分片封装模式适用于大于MTU的NALU。常用的类型是FU-A(分片单元A)。这种模式下,一个NALU被分片成多个RTP包传输。

封装格式

RTP头 | FU Indicator | FU Header | NALU分片数据
  • FU Indicator:包含NALU头的前三位(F、NRI)和类型字段(28表示FU-A)。
  • FU Header:包含分片的开始(S)、结束(E)和NALU类型字段。

  1. S(Start):表示这是一个NALU的起始片段。如果S=1,表示这是该NALU的第一个片段。
  2. E(End):表示这是一个NALU的结束片段。如果E=1,表示这是该NALU的最后一个片段。
  3. R(Reserved):保留位,固定为0。
  4. Type:表示NALU的类型,与NALU头中的类型字段相同。

假设我们有一个NALU需要分成四个片段传输,那么每个片段的FU Header如下:

  • 第一个片段:S=1, E=0, R=0, Type=NALU类型
  • 第二个片段:S=0, E=0, R=0, Type=NALU类型
  • 第三个片段:S=0, E=0, R=0, Type=NALU类型
  • 最后片段:S=0, E=1, R=0, Type=NALU类型

此时第二第三片段FU Header是完全一致的,它们的顺序可以通过RTP序列号、时间戳、接收顺序区分。

通过这种方式,接收端可以根据S和E字段来重组原始的NALU。这种方式确保了大NALU可以被分片并通过网络传输。

总结

  • 单一NALU模式:适用于小NALU,简单直接。
  • 组合帧封装模式:适用于多个小NALU的组合,提高传输效率。
  • 分片封装模式:适用于大NALU,通过分片传输。

RTP头(RTP Header)

RTP头是RTP数据包的一个组成部分,包含了多个字段,用于描述数据包的各种信息。RTP头的结构如下:

  • 版本号(V):2位,表示RTP协议的版本。
  • 填充标志(P):1位,如果P=1,则在报文尾部有填充字节。
  • 扩展标志(X):1位,如果X=1,则在RTP头后有扩展头。
  • CSRC计数器(CC):4位,表示CSRC标识符的个数。
  • 标记(M):1位,用于标记重要事件。
  • 有效载荷类型(PT):7位,表示RTP报文中有效载荷的类型。
  • 序列号(Sequence Number):16位,用于标识发送的RTP报文的序列号。
  • 时间戳(Timestamp):32位,表示数据包的采样时刻。
  • 同步源标识符(SSRC):32位,用于标识同步源。
  • 特约信源标识符(CSRC):每个CSRC占32位,可以有0-15个。

RTP序列号(RTP Sequence Number)

RTP序列号是RTP头中的一个字段,占16位。它用于标识发送的RTP报文的顺序,每发送一个报文,序列号会递增1。接收端可以通过序列号来检测报文丢失情况,并重新排序报文以恢复数据

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

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

相关文章

亚马逊评论爬虫+数据分析

爬取评论 做分析首先得有数据,数据是核心,而且要准确! 1、爬虫必要步骤,选好框架 2、开发所需数据 3、最后测试流程 这里我所选框架是seleniumrequest,很多人觉得selenium慢,确实不快,仅针对此…

批量缓存模版

批量缓存模版 缓存通常有两种使用方式,一种是Cache-Aside,一种是cache-through。也就是旁路缓存和缓存即数据源。 一般一种用于读,另一种用于读写。参考后台服务架构高性能设计之道。 最典型的Cache-Aside的样例: //读操作 da…

09 Oracle数据拯救:Flashback Technologies精细级数据恢复指南

文章目录 09 Oracle数据拯救:Flashback Technologies精细级数据恢复指南一、Flashback Technologies概览二、Flashback Query:查询过去的数据三、Flashback Table:恢复整个表四、Flashback Database:恢复整个数据库五、总结与最佳…

BIST(Built-in Self-Test,内建自测试)学习笔记

参考资料: 内建自测试(Built-in Self-Test,简称BIST)详解_built in self test-CSDN博客 芯片测试术语 ,片内测试(BIST),ATE测试-CSDN博客 可能是DFT最全面的介绍--BIST - 知乎 (zhihu.com) 汽车功能安全--TC3xx LB…

three.js 杂记

在Three.js中,Object3D是所有3D对象的基类,而Group是Object3D的一个子类。Group的目的是为了简化处理多个对象的集合。当你将对象添加到Group中时,它们会以一个单元格的形式被处理,参与Group的某些操作,例如位置更新、…

go函数传值是值传递?还是引用传递?slice案例加图解

先说下结论 Go语言中所有的传参都是值传递(传值),都是一个副本,一个拷贝。 值语义类型:参数传递的时候,就是值拷贝,这样就在函数中就无法修改原内容数据。 基本类型:byte、int、bool…

穿越时空的全球时钟:一个实时多时区显示的网页应用

引言 在当今这个全球化时代,人们经常需要与世界各地的朋友、同事或客户进行沟通。然而,由于时差的存在,找到一个合适的沟通时间往往成为一大挑战。为了解决这一问题,我们开发了一个名为“全球时钟”的网页应用,它能够…

本地部署免费开源助手Ollama

Ollama 安装 安装ollama 官方网站:https://ollama.com/download 2. 安装成功 3. 运行模型 模型:https://ollama.com/library 运行: ollama run llama3.2:3b Mac 、Linux 版本安装类似。 Open-WebUI界面安装 openwebui官网:http…

three.js杂记

空间 - 位置变换: // 假设有一个Three.js的对象: object3D // 存储矩阵位置 const matrix object3D.matrix.clone(); const matrixArray matrix.toArray(); // 转换为数组 // 之后,当你需要恢复位置时 object3D.matrix.fromArray(matrixArray); …

通过DNS服务器架构解释DNS请求过程

在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。 当前网络空间中比较常见DNS请求的流程如下…

HBase使用create创建表时报错ERROR: KeeperErrorCode = NoNode for /hbase/master

场景模拟 1. 正常情况 模拟ERROR: KeeperErrorCode NoNode for /hbase/master错误场景。 正常情况下创建hbase表如下图所示。 2. 删除hbase集群的zk节点 进入zookeeper客户端。 zkCli.sh删除hbase的zk节点。 deleteall /hbase退出zookeeper客户端。 quit3. 重启hbase集…

软件分享丨火绒应用商店

【资源分享】 资源名:火绒应用商店 官方网址:点击跳转 火绒应用商店是由火绒安全推出的一款独立软件。它提供了海量的应用程序,涵盖办公、社交、游戏、视频、工具等多种领域和类别,方便用户轻松找到所需的应用并进行一键下载安装…

在线考试系统demo页面

<!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>在线考试系统</title><link rel"styl…

从0到1基于LangChain制作一个AI猫娘

前言&#xff1a; 看到B站上的AIVtuber的项目落地了&#xff0c;就心血来潮想制作一个AI的猫娘供自己使用&#xff0c;顺便出一个简单的教程&#xff0c;跳过理论&#xff0c;直接实践&#xff0c;作者也还在学习摸索中&#xff0c;所以有错误可以直接在评论区指正。&#xff0…

前端---高效工具(一) : NVM的使用

一、NVM用途 方便快捷 管理和切换各个 node版本。现在前端项目Vue2与Vue3很多项目要求的node版本不一致导致的。 二、安装 如果有安装nodejs&#xff0c;按一下步骤清理环境 1.卸载应用程序的 nodejs 2.删除环境变量中nodejs的配置 3.删除C:\Users\Administrator 中最下面…

反序列化漏洞浅析

Apache InLong 是开源的高性能数据集成框架&#xff0c;支持数据接入、数据同步和数据订阅&#xff0c;同时支持批处理和流处理&#xff0c;方便业务构建基于流式的数据分析、建模和应用。浅析Apache InLong < 1.12.0 JDBC反序列化漏洞&#xff08;CVE-2024-26579&#xff0…

三周精通FastAPI:39 用FastAPI CLI命令行程序管理FastAPI项目

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/fastapi-cli/ FastAPI CLI FastAPI CLI 是一个命令行程序&#xff0c;你可以用它来部署和运行你的 FastAPI 应用程序&#xff0c;管理你的 FastAPI 项目&#xff0c;等等。 当你安装 FastAPI 时&#xff08;例如使用 p…

Bean实例化

Bean有3种实例化方法 1.通过无参构造方法实例化 假如我们有以下结构&#xff1a; 这里我们在无参构造方法种打印字符串&#xff1a; 然后我们运行 可知&#xff0c;IoC管理bean进行实例化的时候是通过无参构造方法实例化的。 2.静态工厂实例化 假设我们有以下配置文件&…

【网络安全】线程安全分析及List遍历

未经许可,不得转载。 文章目录 线程线程安全问题遍历List的方式方式一方式二方式三方式四(Java 8)方式五(Java 8 Lambda)遍历List的同时操作ListVector是线程安全的?使用线程安全的CopyOnWriteArrayList使用线程安全的List.forEach线程 线程是程序执行的最小单位。一个程…

ReactPress 安装指南:从 MySQL 安装到项目启动

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎Star。 ReactPress 是一个基于 React 的开源发布平台&#xff0c;适用于搭建博客、网站或内容管理系统&#xff08;CMS&#xff09;。本文将详细介绍如何安装 ReactPress&#xff0c;包括…