当前位置: 首页 > news >正文

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情

前提: 为什么要学习 RTP(Real-time Transport Protocol)重点

  • 简介:RTP是一个实时传输媒体数据的协议,通常与RTSP一起使用。它负责在网络上传输音视频数据。
  • 特点:RTP通过UDP或TCP传输媒体数据,提供时间戳和序列号等机制以保证实时性。它支持多种视频编码格式,且具有良好的扩展性和兼容性。

应用场景:

常与RTSP一起用于音视频流传输,确保媒体数据能够准确、高效地传输到目标终端并进行解码播放。

1. 视频会议

  • 应用场景:在视频会议中,RTP被用于将来自不同位置的多个音视频流混合在一起,并实时传输给所有参与者。它确保了音视频数据的同步性和实时性,使得远程会议如同面对面交流一般。
  • 优势:RTP的高实时性和精确的时间戳机制,使得音视频数据在传输过程中能够保持低延迟和同步性,从而提高了会议的质量和效率。

2. 直播服务

  • 应用场景:在直播场景中,RTP协议为高质量的音视频传输提供了保障,RTP能确保观众能够实时观看到流畅、清晰的视频内容。
  • 优势:RTP支持多种音视频编码格式,并且可以根据网络状况动态调整传输参数,以适应不同的直播需求。同时,它还可以与RTCP(Real-time Transport Control Protocol,实时传输控制协议)配合使用,实现传输质量的监控和反馈。

3. 流媒体服务

  • 应用场景:流媒体服务如在线视频点播、网络电视等也广泛采用RTP协议。它允许用户随时随地访问和播放音视频内容,而无需等待整个文件下载完成。
  • 优势:RTP的流式传输特性使得音视频数据可以边下载边播放,大大节省了用户的时间和带宽资源。同时,它还可以根据用户的网络状况自动调整播放质量,以提供最佳的观看体验。

4. IP电话

  • 应用场景:在IP电话通信中,RTP用于传输语音数据。它确保了语音数据的实时性和清晰度,使得用户能够像使用传统电话一样进行通话。
  • 优势:RTP的低延迟和高效传输特性使得IP电话通信具有与传统电话相似的通话质量,并且不受地理位置的限制。

5. 监控录像

  • 应用场景:在监控系统中,RTP协议被用于实时传输监控视频数据。它确保了监控画面的实时性和清晰度,使得监控人员能够及时发现并处理异常情况。
  • 优势:RTP的实时传输能力和高可靠性使得监控系统能够稳定运行并发挥最大效用。同时,它还可以与其他监控设备和技术相结合,形成更加完善的监控体系。

RTP 协议详解

RTP报⽂由两部分组成:报头和有效载荷

RTP头部 大小为 :固定的 12字节 + [0-60个字节]

0-60个字节 是 0-15个CSRC组成,每个CSRC 都是4个字节--- 也就是32位组成

RTP报头格式如下图所示

V:RTP协议的版本号, 占2位 ,当前协议版本号为2。
P:填充标志, 占1位 ,如果P=1,则在该报⽂的尾部填充⼀个或多个额外的⼋位组,它们不是有效载荷的⼀部分。其作用是:有些加密算法,需要是16位的倍数才能加密。不过一般都是0
X:扩展标志, 占1位 ,如果X=1,则在RTP报头后跟有⼀个扩展报头。只在webrtc中会用到,如果这个有值,那么 报文会变成  RTP头部 + 扩展报头 + 有效载荷
CC:CSRC计数器, 占4位 ,指示CSRC 标识符的个数。一般为0,标识 特约信源(CSRC)的个数。
M: 标记, 占1位 ,不同的有效载荷有不同的含义,对于视频,标记⼀帧的结束;对于⾳频,标记帧的开始。
PT: 有效载荷类型, 占7位 ,⽤于说明RTP报⽂中有效载荷的类型,如GSM⾳频、JPEM图像等。
序列号: 占16位 ,⽤于标识发送者所发送的RTP报⽂的序列号,每发送⼀个报⽂, 序列号增1 接收者通过序列号来检测报⽂丢失情况,重新排序报⽂,恢复数据
时戳(Timestamp): 占32位 ,时戳反映了该RTP报⽂的第⼀个⼋位组的采样时刻。接收者使⽤时戳来 计算延迟和延迟抖动,并进⾏同步控制。
同步信源(SSRC)标识符: 占32位 ,⽤于标识同步信源。该标识符是随机选择的,参加同⼀视频会议的 两个同步信源不能有相同的SSRC。

特约信源(CSRC)标识符:每个CSRC标识符 占32位 ,可以有0~15个。每个CSRC标识了包含在该RTP 报⽂有效载荷中的所有特约信源。

因此大小如下:

2+1+1+4+1+7+16+32+32 = 96 位  = 12bytes 固定大小

0-15 个 32位 不确定大小[0-60个字节]

同步信源(SSRC)标识符 的解释:

是指产⽣媒体流的信源, 例如⻨克⻛、摄像机、RTP混合器等。每个摄像头都是一个SSRC,每个麦克风都是一个SSRC, 它通过RTP报头中的⼀个32位数字SSRC标识符来标识,⽽不依赖于⽹络地址,接收者将根据 SSRC标识符来区分不同的信源 进⾏RTP报 ⽂的分组

例如,有三个信号源各发出⼀路rtp流,
RTP1携带的SSRC是SSRC1,
RTP2携带的SSRC是SSRC2,
RTP3携带SSRC3,
这三路RTP流到达混合器时,混合器会将这三路流混合成⼀路流发出去,它会把这三路流的SSRC记录下来,形成⼀个列表,叫CSRC表,在发送的混合RTP流中,SSRC域填充的字段是混合器本身的SSRC4,⽽CSRC字段则会根据该包的负载的源来填⼊。

特约信源(CSRC) 标识符的解释:

特约信源是指当混合器接收到⼀个或多个同步信源的RTP报⽂后,经过混合处理产⽣⼀个新的组合RTP报 ⽂,并把混合器作为组合RTP报⽂的SSRC,⽽将原来所有的SSRC都作为CSRC传送给接收者,使接收者 知道组成组合报⽂的各个SSRC。
例如当前的RTP包的负载是来⾃SSRC1的,那么在当前RTP包的CSRC字段填⼊SSRC1。
这样接收者就可以根据CSRC来区分不同的信源;
⼀般的,混合的RTP流中,每隔⼀段时间,就会有⼀个RTP报⽂包含了完整的CSRC表。例如在发送混合流时的第⼀个RTP包,它的CSRC域把CSRC表都填⼊,此时该包的负载可能是⽆意义或者并不是媒体流;此后的RTP报⽂中则根据负载的来源来填⼊CSRC域。

RTP 协议代码上的表现形式:

typedef struct _rtp_header_t
{uint32_t v:2; /* protocol version */uint32_t p:1; /* padding flag */uint32_t x:1; /* header extension flag */uint32_t cc:4; /* CSRC count */uint32_t m:1; /* marker bit */uint32_t pt:7; /* payload type */uint32_t seq:16; /* sequence number */uint32_t timestamp; /* timestamp */uint32_t ssrc; /* synchronization source */
} rtp_header_t;

NEXT 使用RTP 协议 对 H264 封包和解包

为什么说RTP 协议重要呢?因为RTP协议不依赖于RTSP协议存在,在后面的webrtc中,会大量的使用到 RTP 协议,将编码好的h264包,发送给对端。因此要学习:

PCM-->编码成h264--->封装成RTP----->发送给对端------>对端将RTP解包成 h264--->解码成PCM播放

TODO

使用RTP 协议 对 H264 封包和解包-CSDN博客

NEXT 使用RTP 协议 对 AAC 封包和解包

TODO

相关文章:

FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情

前提: 为什么要学习 RTP(Real-time Transport Protocol)重点 简介:RTP是一个实时传输媒体数据的协议,通常与RTSP一起使用。它负责在网络上传输音视频数据。特点:RTP通过UDP或TCP传输媒体数据,提供时间戳和序…...

Linux系统编程——系统内核中的信号

目录 一、前言 二、系统内核中的信号 三、sigset_t 四、信号集操作 1、sigpending(); 2、sigemptyset(); 3、sigfillset(sigset_t *set); 4、int sigaddset ()和sigdelset() ​编辑 5、sigismember() 6、sigprocmask() 五、信号集操作代码演示 六、深入理解进程的信…...

delve调试环境搭建—golang

原文地址:delve调试环境搭建—golang – 无敌牛 欢迎参观我的个人博客:无敌牛 – 技术/著作/典籍/分享等 由于平时不用 IDE 开发环境,习惯在 linux终端vim 环境下开发,所以找了golang的调试工具,delve类似gdb的调试界…...

shell脚本的循环-----while和for循环

一、while 1.格式 while 条件表达式; do 命令 done 2.案例 : ping测试子网段的主机网段由用户输入,例如用户输入192.168.101 ,则ping192.168.101.125 — 192.101.131 UP: /tmp/host_up.txt Down: /tmp/host_down.txt &#…...

【游戏设计原理】21 - 解谜游戏的设计

你想象一下,刚坐下准备玩游戏,想着“今天得挑战一下我的智商极限!”可结果碰上一个谜题,傻眼了,心里默念:“这啥玩意儿?这游戏是在玩我吗?”如果这个谜题太简单了,你可能…...

【漏洞复现】Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现(CVE-2024-9234)

🏘️个人主页: 点燃银河尽头的篝火(●’◡’●) 如果文章有帮到你的话记得点赞👍+收藏💗支持一下哦 一、漏洞概述 1.1漏洞简介 漏洞名称:Wordpress GutenKit 插件 远程文件写入致RCE漏洞复现漏洞编号:CVE-2024-9234漏洞威胁等级:超危影响范围:GutenKit <= 2.1.0…...

深度学习任务简介:分类、回归和生成

深度学习任务简介&#xff1a;分类、回归和生成 文章目录 深度学习任务简介&#xff1a;分类、回归和生成一、分类任务&#xff08;Classification Task&#xff09;什么是分类任务&#xff1f;**分类任务的常见应用**分类任务的输出主要算法 二、回归任务&#xff08;Regressi…...

【测试】Unittest

近期更新完毕&#xff0c;建议关注收藏&#xff01; 目录 简介TestCaseTestSuiteTestRunnerTestLoaderFixture tips:ctrl? 可以看方法的help文档 简介 python自带的单元测试框架&#xff0c;也可以做自动化测试 组织多个用例去执行&#xff0c;用例都是用单独的目录存放的 丰…...

java 根据路径下载文件转换为MultipartFile,并且上传到服务器

直接上代码 controller层 GetMapping("/downloadAndUploadAttachment")UpdateOperationLogging(msg "根据路径下载文件转换为MultipartFile,并且上传到服务器")Operation(summary "根据路径下载文件转换为MultipartFile,并且上传到服务器", de…...

Onvif服务端开发

实现了Onvif服务端的设备搜索和RTSP流的功能。用 ONVIF Device Manager 测试工具可以成功搜索到设备和获取到RTSP流&#xff0c;有的路由器可能不支持239.255.255.250组播&#xff0c;我一开始用的电信的那种光猫路由器二合一的&#xff0c;一直搜不到设备&#xff0c;后面用So…...

【jvm】主要参数

Java 虚拟机&#xff08;JVM&#xff09;有许多参数用于控制其行为和性能&#xff0c;下面是一些 主要的 JVM 启动参数&#xff0c;这些参数通常分为以下几类&#xff1a; 内存管理相关参数 这些参数主要用来配置 JVM 的内存分配策略、堆内存、栈内存等。 -Xms 设置 JVM 启动…...

【优选算法】—移动零(双指针算法)

云边有个稻草人-CSDN博客 想当一名牛的程序员怎么能少的了练习算法呢&#xff1f;&#xff01; 今天就立即开启一个新专栏&#xff0c;专干算法&#xff0c;提高算法能力&#xff08;废柴的我也在准备蓝桥杯哈哈&#xff09;—— 目录 1.【 283. 移动零 - 力扣&#xff08;Lee…...

PostgreSQL标识符长度限制不能超过63字节

文章目录 问题&#xff1a;标识符太长会被截断分析相关源码可以尝试以下案例 问题&#xff1a;标识符太长会被截断 在创建表时&#xff0c;发现表名太长会自动被截断&#xff0c;导致查询表时报错了。 分析 参考&#xff1a;https://www.postgresql.org/docs/current/limits…...

嵌入式硬件面试题

1、请问什么是通孔、盲孔和埋孔&#xff1f;孔径多大可以做机械孔&#xff0c;孔径多小必须做激光孔&#xff1f;请问激光微型孔可以直接打在元件焊盘上吗&#xff0c;为什么&#xff1f; 通孔是贯穿整个PCB的过孔&#xff0c;盲孔是从PCB表层连接到内层的过孔&#xff0c;埋孔…...

深度解析 OneCode 混合编译:创新驱动的开发变革

前言 在软件开发领域&#xff0c;不断追求高效、灵活与强大的开发模式是永恒的主题。OneCode 作为一款引领潮流的开发工具&#xff0c;其混合编译特性正逐渐成为开发界瞩目的焦点。本文将深入剖析 OneCode 的混合编译机制&#xff0c;揭示它如何为软件开发带来前所未有的变革与…...

[文献阅读] Unsupervised Deep Embedding for Clustering Analysis (无监督的深度嵌入式聚类)

文章目录 Abstract:摘要聚类深度聚类 KL散度深度嵌入式聚类(DEC)KL散度聚类软分配&#xff08;soft assignment&#xff09;KL散度损失训练编码器的初始化聚类中心的初始化 实验评估总结 Abstract: This week I read Unsupervised Deep Embedding for Clustering Analysis .It…...

ajax中get和post的区别,datatype返回的数据类型有哪些?web开发中数据提交的几种方式,有什么区别。

在 Web 开发中&#xff0c;GET 和 POST 是两种常见的 HTTP 请求方法&#xff0c;它们有一些显著的区别。此外&#xff0c;datatype 参数在 jQuery 的 ajax() 请求中指定了预期的响应数据类型。接下来&#xff0c;我会详细解释这些问题。 1. GET 和 POST 请求的区别 GET 请求 和…...

网络七层杀伤链

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&…...

GAN网络详解及涨点大全总结(源码)

(需要源码请私信或评论) GAN原理 GAN的基本原理建立在 生成模型和判别模型的博弈过程 上。这种独特的机制使得GAN能够在复杂的分布上实现高效的无监督学习。在这个过程中,生成器G和判别器D相互竞争,最终达到一种平衡状态,在此状态下,G能够产生高质量的合成样本,而D则无…...

【自动化】Python SeleniumUtil 工具 开启开发者模式 自动安装油猴用户脚本等

【自动化】Python SeleniumUtil 工具 【Python】使用Selenium 操作浏览器 自动化测试 记录-CSDN博客文章浏览阅读58次。文章浏览阅读42次。【附件】Selenium chromedriver 驱动及浏览器下载。【附件】Selenium chromedriver 驱动及浏览器下载-CSDN博客。3.安装Chrome浏览器驱动…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

MyBatis中关于缓存的理解

MyBatis缓存 MyBatis系统当中默认定义两级缓存&#xff1a;一级缓存、二级缓存 默认情况下&#xff0c;只有一级缓存开启&#xff08;sqlSession级别的缓存&#xff09;二级缓存需要手动开启配置&#xff0c;需要局域namespace级别的缓存 一级缓存&#xff08;本地缓存&#…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...