RTP介绍

news2024/11/29 3:44:21

一、简介

Real-time Transport Protocol(实时传输协议)  具体参考rfc3350介绍 

可负载H264、H265、G711A、AAC、PS、私有流等各种数据。

二、格式

RTP 固定头部格式如下

  

 

version   (V):  2bits RTP协议版本号 目前协议版本为2

padding (P):  1bit  填充位  设置成1,表示尾部有填充数据。最后一个字节表示 填充数据长度

extension (X): 1bit  扩展位,设置成1,表示固定头部后面有扩展头

CSRC count (CC): 4bits CSRC个数, 每个CSRC占4字节

marker (M): 1bit  不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。

payload type (PT): 7bits 负载类型  可参考rfc35511 目前视频主要用96后表示

sequence number: 16bits 包序号 用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。

timestamp: 32bits 时间戳 同一帧数据时间戳相同

SSRC: 32bits 同步信源标识符 

CSRC list: 32bits  0-15个, 每个占32bits 由CC决定个数

RTP 扩展头部格式如下

 

第3~4字节表示扩展数据长度,后面跟扩展数据。

三、负载数据

RTP负载H264

参考rfc6184 rtp负载h264

packetization-mode(打包模式)  该字段在sdp中体现。其中RTSP是在 DESCRIBE响应中携带。

0或不存在  Single NAL unit mode 单一nalu单元模式

1-Non-interleaved mode 非交织模式 目前最常见

2-Interleaved mode  交织模式 

目前RTP库支持0和1模式

Nal Unit 如下

F : 1bit 禁止位

NRI: 2bits  nal_ref_idc nal 用于指示该 nalu 的重要性

Type: 5bits  nal_unit_type

不同打包模式支持的打包方式如下:

Single NAL unit mode 支持NAL unit

Non-interleaved mode 支持NAL unit、STAP-A、FU-A(最常见)

Single NAL unit Packet(单一打包)

当一帧数据小于MTU时候,可采用该方式打包, 去掉起始头(000001) 

FU-A分片模式

当一帧长度过长时候,可选择FU-A分片模式打包, RTP负载格式如下

 

H264 Nalu头和RTP FU indicator FU header关系如下

FU-A头部由2个字节组成, FU indicator和FU header各占一个字节

FU indicator如下

 

type=28 

FU header如下

S: 1bit   分片开始描述符  1-表示开始 0-不是开始

E: 1bit  分片结束描述符  1-表示结束 0-不是结束

R: 1bit  保留位

Type:  5bits  NAL Unit type  对应H264中的nalu type。

RTP负载H265

参考rfc7798 rtp负载h265 

NAL Unit Header如下

F: 1bit 禁止位
Tyep: 6bits nal unit type

LayerId:  6bits  表示NAL所在的Access unit所属的层,该字段是为了HEVC的继续扩展设置。也就是目前都是0

TID:  3bits 指定nal单元加1的时间标识符。时间id的值等于tid-1,tid的值为0是非法的,

Single NAL unit Packet(单一打包)

PayloadHer: 负载头  从H265 NAL unit复制过来  Type值为1~47

DONL(Decoding Order Number): 解码序列号

Fragmentation Units(分片包)

H265 Nalu头和RTP FU indicator FU header关系如下

PayloadHer 中Type=49

FU header如下

    S : 1bit 分片开始描述符  1-表示开始 0-不是开始

    E:  1bit 分片结束描述符  1-表示结束 0-不是结束

    FuType: 6bits 表示Nal Unit的类型 和h265中的nal_unit_type取值相同

RTP负载通用数据

包括负载G711A, G711U, PS等数据 可直接负载

RTP负载AAC

参考rfc3640rtp负载aac

需剥掉adts头。

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

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

相关文章

无线led显示屏的优势

无线LED显示屏是一种利用无线技术进行数据传输和控制的LED显示屏,相比传统有线连接的LED显示屏,具有以下优势: 灵活性和便捷性:无线LED显示屏无需使用复杂的有线连接,可以通过无线网络进行数据传输和控制。这使得安装和…

Linux内核中内存管理相关配置项的详细解析1

本文基于kernel 6.1.0,针对于“Linux/x86 6.1.0 Kernel Configuration”中的“Memory Management options”项下的各个子配置项(如下图所示)进行详细解析。 一、Support for paging of anonymous memory (swap) 这个选项以前位于“General S…

deepin 安装 MySQL

1.下载网址:MySQL :: Begin Your Downloadhttps://dev.mysql.com/downloads/file/?id519241 不用注册,直接下载 2. 打开下载文件:mysql ......deb 文件 3 选择步骤:选ubuntu bionic 4 ->MySQL Server&Cluster->mysq…

钢铁废水除氟

钢铁工业废水含多种污染物,包括大量的挥发酚、氟化物、石油类、悬浮物、砷、铅等有害物质。其中含氟工业废水的大量排放,不仅污染环境,还会危害到农作物和牲畜的生长发育,并且可以通过食物链影响到人体健康。所以对含氟废水需降氟…

去掉字符串中的空格,通过正则根据不同的需求分别能去掉前、后、前后、中间的空格。

正则小tips: 正则表达式 - 修饰符 gglobal - 全局匹配 正则表达式 - 元字符 ^匹配输入字符串的开始位置。*匹配前面的子表达式零次或多次。$匹配输入字符串的结束位置。\s 匹配任何空白字符,包括空格、制表符、换页符等等。 匹配前面的子表达式一次…

【计算机组成与体系结构Ⅰ】章节测试(5-7)

在CPU中跟踪指令后继地址的寄存器是___。 A 主存地址寄存器 B 程序计数器 (我的答案) C 指令寄存器 D 状态条件寄存器 下面描述的RISC机器基本概念中,正确的表述是 __。 A. RISC机器不一定是流水CPU. B. RISC机器一定是流水CPU. &#…

基于Tensorflow+SDD+Python人脸口罩识别系统(深度学习)含全部工程源码及模型+视频演示+图片数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境Anaconda 环境搭建 模块实现1. 数据预处理2. 模型构建及算法实现3. 模型生成 系统测试1. 训练准确率2. 运行结果 工程源代码下载其它资料下载 前言 在当今全球范围内,新冠疫情对我们的生活方式带来了…

单核 CPU 支持 Java 多线程吗?我们来一起看看吧

1 前言 由于现在大多计算机都是多核CPU,多线程往往会比单线程更快,更能够提高并发,但提高并发并不意味着启动更多的线程来执行。更多的线程意味着线程创建销毁开销加大、上下文非常频繁,你的程序反而不能支持更高的TPS。 2 时间…

超图使用问题汇总

超图使用问题汇总 切地图栅格瓦片的时候,必须确认生成地图的源数据坐标系已经被识别,否则无法进行全球剖分 下图就是未识别坐标系的情况 切地图矢量瓦片的时候,需要使用idesktopx来切,idesktop无法生成矢量瓦片。 矢量瓦片切片时…

Ubuntu安装docker-compose

官网 Install Compose standalone curl -SL https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose离线 下载文件 开启vpn浏览器https://github.com/docker/compose/releases/download/v2.18.1/dock…

第九篇:强化学习Q-learning算法 通俗介绍

你好,我是郭震(zhenguo) 今天介绍强化学习第九篇:Q-learning算法 前面我们介绍强化学习基本概念,马尔科夫决策过程,策略迭代和值迭代,这些组成强化学习的基础。 从今天开始逐步介绍常用强化学习算法&#x…

QT调用linux外部命令或者shell script

目录 原文链接:https://blog.csdn.net/YMGogre/article/details/128973098 0、本文使用的环境配置: 1、新建一个简单的Shell脚本: 2、在Qt中启动外部Shell脚本: 2.1、使用标准库中提供的方法 —— system() 2.2、使用Qt提供…

接口抓包分析与Mock实战

这里写目录标题 一、知识点梳理1、接口抓包需要具备的能力2、接口抓包原理 二、Charles 基础使用三、charles抓包分析四、Charles 使用1、过滤:Filter、Focus2、重发:Repeat、Repeat Advanced3、修改请求:Compose4、弱网:Throttle…

实验3 Tomasulo算法【计算机系统结构】

实验3 Tomasulo算法【计算机系统结构】 前言推荐实验3 Tomasulo算法1 实验目的2 实验平台3 实验内容和步骤4 实验总结与心得 最后 前言 2023-6-9 9:19:50 以下内容源自《【计算机系统结构】》 仅供学习交流使用 推荐 实验2 指令调度和延迟分支【计算机系统结构】 实验3 To…

webgpu之旅03

19854902 319854902 319854902 319854902 webgpu交Q流群我们找个例子看看别人的renderer three.js v152 首先init函数 看见中间有个对象 WebGPURenderPipelines 跟进去看看 这个构造函数里可以看见有这么些数据 get( renderObject ) {const device this.device;const cache …

Meetup 报名|06.17 StarRocks Friends 与你相约上海

StarRocks & Friends 是由 StarRocks 社区发起的城市线下 meetup,旨在联合社区与行业的专家小伙伴们分享基于 StarRocks 的最佳实践、大数据分析的前沿技术和 StarRocks 生态融合等热门话题。 不远千里奔赴,只为与你相聚。这个夏天,让我们…

Vue+springboot小区居民外出登记信息管理系统

系统采用更加便于维护和使用的JAVA语言,其可拓展性高且更富于表现力,方便基本信息、外出申请、健康信息、外来人员等功能。通过Spring Boot框架来进行网页编程,其方便易用、移植适用性广、更加安全可靠。数据库方面则选用的是体积小、速度快、…

【安装教程】Win10上安装Microsoft To-Do客户端(手机端)

这里写自定义目录标题 操作方法操作说明辅助疑难问题 操作方法 此方法是应用于微软商店无法安装、安装不成功等情况 操作说明 原文:手把手教你在Win10上安装Microsoft To-Do客户端:https://www.jianshu.com/p/32a1ea417cba 1.访问微软网站,找到To-Do的…

【深入浅出 Spring Security(七)】RememberMe的实现原理详讲

RememberMe 的实现原理 一、RememberMe 的基本使用二、RememberMeAuthenticationFilter 源码分析RememberMeServicesTokenBasedRememberMeServicesTokenBasedRememberMeServices 中对 processAutoLoginCookie 方法的实现总结原理图式 三、提高安全性PersistentTokenBasedRememb…

【数据分析之道-Matplotlib(八)】Matplotlib箱线图

文章目录 专栏导读1、Matplotlib箱线图boxplot()基本语法2、Matplotlib箱线图boxplot()举例异常值3、Matplotlib箱线图boxplot()样式定义4、Matplotlib箱线图boxplot()举例带缺口5、Matplotlib箱线图boxplot()举例横向显示6、Matplotlib箱线图boxplot()举例显示平均值7、Matplo…