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

news2024/12/21 20:51:06

前提: 为什么要学习 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

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

TODO

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

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

相关文章

Chapter 18 CMOS Processing Technology

Chapter 18 CMOS Processing Technology 这一章介绍CMOS制造工艺, 介绍wafer制作, 光刻, 氧化, 离子注入, 沉淀(deposition)和刻蚀. 然后介绍MOS管制作流程, 最后介绍被动器件和互连接. 18.1 General Considerations sheet resistance为方块电阻. R ρL/(W t), 方块电阻定…

服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例

服务器存储数据恢复环境: 一台V7000存储上共12块SAS机械硬盘(其中1块是热备盘),组建了2组Mdisk,创建了一个pool。挂载在小型机上作为逻辑盘使用,小型机上安装的AIXSybase。 服务器存储故障: V7…

LabVIEW中的“Synchronize with Other Application Instances“

在LabVIEW中,“Synchronize with Other Application Instances”是一个常见的提示或错误,通常出现在尝试并行运行多个LabVIEW实例时,特别是当你打开多个VI或项目时。这个问题可能影响程序的执行流程,导致不同实例之间的数据同步或…

简单配置,全面保护:HZERO审计服务让安全触手可及

HZERO技术平台,凭借多年企业资源管理实施经验,深入理解企业痛点,为您提供了一套高效易用的审计解决方案。这套方案旨在帮助您轻松应对企业开发中的审计挑战,确保业务流程的合规性和透明度。 接下来,我将为大家详细介绍…

【论文研读】U-DiTs:在U型扩散Transformer中引入下采样Token,以更低计算成本超越DiT-XL/2

推荐理由 这篇论文提出了一种新的U型扩散Transformer模型(U-DiT),该模型通过对自注意力机制中的查询、键和值进行下采样,有效减少了计算冗余,同时提高了性能。论文中的研究不仅包含理论分析和实验验证,还展…

深入理解 Linux wc 命令

文章目录 深入理解 Linux wc 命令1. 基本功能2. 常用选项3. 示例3.1 统计文件的行、单词和字符数3.2 仅统计行数3.3 统计多个文件的总和3.4 使用管道统计命令输出的行数 4. 实用案例4.1 日志分析4.2 快速统计代码行数4.3 统计单词频率 5. 注意事项6. 总结 深入理解 Linux wc 命…

SDMTSP:黑翅鸢算法(Black-winged kite algorithm,BKA)求解单仓库多旅行商问题,可以更改数据集和起点(MATLAB代码)

一、黑翅鸢算法BKA 黑翅鸢算法(Black-winged kite algorithm,BKA)由Wang Jun等人于2024年提出,该算法受黑翅鸢的迁徙和掠食行为启发而得。BKA集成了柯西突变策略和领导者策略,增强了算法的全局搜索能力,提…

[oeasy]python054_python有哪些关键字_keyword_list_列表_reserved_words

python有哪些关键字_keyword_list_列表_reserved_words 回忆上次内容 hello world 不是 从来就有的 来自于 c语言 print、小括号 和 双引号 也来自于 c语言 添加图片注释,不超过 140 字(可选) python 标识符 的 命名规则 依然 完全 学习…

OpenCV 学习记录:首篇

最近在学习机器视觉,希望能通过记录博客的形式来鞭策自己坚持学完,同时也把重要的知识点记录下来供参考学习。 1. OpenCV 介绍与模块组成 什么是 OpenCV? OpenCV (Open Source Computer Vision Library) 是一个开源的计算机视觉和机器学习软…

GTID详解

概念和组成 1,全局事务表示:global transaction identifiers 2, GTID和事务一一对应,并且全局唯一 3,一个GTID在一个服务器上只执行一次 4,mysql 5.6.5开始支持 组成 GTID server_uuid:transaction_id 如&#xf…

[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算

在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…

项目管理工具Maven(一)

Maven的概念 什么是Maven 翻译为“专家”,“内行”Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。什么是理想的项目构建? 高度自动化,跨平台,可重用的组件,标准…

中间件 redis安装

redis官网地址:Redis - The Real-time Data Platform 环境 CentOS Linux release 7.9.2009 (Core) java version "17.0.12" 2024-07-16 LTS 1、通过压缩包安装redis 1,远程下载redis压缩包,或去官网下载:Downloads …

穷举vs暴搜vs深搜vs回溯vs剪枝系列一>找出所有子集的异或总和再求和

题目&#xff1a; 解析&#xff1a; 代码&#xff1a; private int ret;//返回周结果private int path;//枚举一个元素就异或进去public int subsetXORSum(int[] nums) {dfs(nums, 0);return ret;} private void dfs(int[] nums, int pos){ret path;for(int i pos; i <…

C# 从控制台应用程序入门

总目录 前言 从创建并运行第一个控制台应用程序&#xff0c;快速入门C#。 一、新建一个控制台应用程序 控制台应用程序是C# 入门时&#xff0c;学习基础语法的最佳应用程序。 打开VS2022&#xff0c;选择【创建新项目】 搜索【控制台】&#xff0c;选择控制台应用(.NET Framew…

创新实训——前端:配置问题及解决

在配置前端环境中&#xff0c;出现了一些问题&#xff1a; Error: The following dependencies are imported but could not be resolved: element-plus (imported by C:/Users/30753/Desktop/cxsx/Coarse-grained-information-processing-front/src/request.js) element-plus…

【解决方案】三方云仓与各电商平台的电子面单对接

为实现三方云仓与各电商平台的电子面单对接&#xff0c;您需要确保您的WMS&#xff08;仓库管理系统&#xff09;能够通过奇门接口&#xff08;假设这是一个特定的API或中间件服务用于连接不同的系统&#xff09;与各个电商平台进行数据交换。下面是一个简化的解决方案框架&…

属性描述符

什么是属性描述符 1 数据描述符 2 存取描述符 3 获取属性描述符 4 设置属性描述符 4.1 配置writable 4.2 配置configurable 4.3 configurable的特殊性 4.4 配置enumerable 5.同时设置多个属性的属性描述符 6.get和set的用法具体看访问器属性getter和setter帖子。 什…

PostgreSQL技术内幕21:SysLogger日志收集器的工作原理

0.简介 在前面文章中介绍了事务模块用到的事务日志结构和其工作原理&#xff0c;本文将介绍日志的另一个部分&#xff0c;操作日志&#xff0c;主要去描述SysLogger日志的工作原理&#xff0c;流程以及其中关键的实现&#xff1a;日志轮转&#xff0c;刷盘性能问题等&#xff…

Unity3D仿星露谷物语开发6之角色添加动画

1、目的 给角色添加素材中的动画&#xff0c;最终让角色动起来。 2、准备工作 当前的预设体中的Player对象还不够完善&#xff0c;需要删除掉再优化下。此时应当&#xff1a;Hierarchy中的Player对象切断和预设体的关联&#xff0c;同时删除Prefabs中的Player对象。 首先&a…