RTCP协议

news/2024/9/18 5:22:59/ 标签: 网络

一、常用RTCP数据包类型

类型缩写表示解释
200SR(Sender Report)发送端报告
201RR(Receiver Report)接收端报告
202SDES(Source Description Items)源点描述
203BYE结束传输
204APP特定应用

    (一般,推流段发送SR,收流端回应RR与SEDS。

        通常,200单独使用,201与202配合使用。)

1.1 SR

数据结构

typedef struct SR {/* byte0 */uint8_t rc : 5;//接收报告计数器,5位。uint8_t P : 1;//填充位,1位。如果为1,则RTCP报文尾部添加 填充字节uint8_t version : 2;//RTCP版本号,2位。/* byte1 */uint8_t pt;//包类型,8位。SR包为200/* byte2-3 */uint16_t len;//RTCP报文长度,16位。包括填充内容/* byte4-7 */uint32_t ssrc_of_sender;//对应的RTP包的SSRC,32位。/* byte8-15 */uint64_t NTS;//发送报告的实际时间,64位。/* byte16-19 */uint64_t RTS;//数据采样时间,32位/* byte20-23 */uint32_t SPC;//从 开始发送包 至 发送此SR包,发送的RTP包数量//当发送者更改SSRC时,这个域会清零/* byte24-27 */uint32_t SOC;//从 开始发送包 至 发送此SR包,发送的净荷字节总数(不包含头部与填充)//当发送者更改SSRC时,这个域会清零//-----------------------报告块(开始)-----------------------//	接下来每24个字节为一块报告块,用于报告每个接收源的状态//	一个SR包可以有多个报告块/* byte0-3 */uint32_t ssrc_source;//第一个报告块 接收端 的SSRC,32位/* byte4-7 */uint32_t C : 24;//RTP包的丢包数量uint32_t F : 8;//RTP包的丢包率,占8位/* byte8-11 */uint32_t EHSN;//扩展最大序列号,32位,接收到的RTP包的最大序列号/* byte12-15 */uint32_t J;//接收抖动,32位,RTP包接收的方差估计/* byte16-19 */uint32_t LSR;//最后接收端收到的SR包的NTP的低32位//如果之前还没有收到SR包,则此域为0/* byte20-23 */uint32_t DLSR;//上一次发送SR包到现在的时间间隔//-----------------------报告块(结束)-----------------------/* ......这里还可以有n个报告块...... *//* 扩展字段(取决于P位) */
} SR;

1.2 RR

        RR与SR最大的区别就是少了20个字节的发送者信息,其余相同。

数据结构

typedef struct RR {uint8_t RC : 5;//报告块计数器uint8_t P : 1;//扩展位uint8_t version : 2;//RTCP版本号uint8_t PT;//包类型,RR为201uint16_t len;//包长度uint32_t ssrc_of_sender;//发送者的SSRC//-----------------------报告块(开始)-----------------------//	接下来每24个字节为一块报告块,用于报告每个接收源的状态//	一个RR包可以有多个报告块/* byte0-3 */uint32_t ssrc_source;//第一个报告块 接收端 的SSRC,32位/* byte4-7 */uint32_t C : 24;//RTP包的丢包数量uint32_t F : 8;//RTP包的丢包率,占8位/* byte8-11 */uint32_t EHSN;//扩展最大序列号,32位,接收到的RTP包的最大序列号/* byte12-15 */uint32_t J;//接收抖动,32位,RTP包接收的方差估计/* byte16-19 */uint32_t LSR;//最后接收端收到的SR包的NTP的低32位//如果之前还没有收到SR包,则此域为0/* byte20-23 */uint32_t DLSR;//上一次发送SR包到现在的时间间隔//-----------------------报告块(结束)-----------------------/* ......这里还可以有n个报告块...... *//* 扩展字段(取决于P位) */
} RR;

1.3 SDES

        SDES用于描述 “源”

数据结构

typedef struct SDES {uint8_t RC : 5;//源描述块计数器uint8_t P : 1;//扩展位uint8_t version : 2;//RTCP版本号uint8_t PT;//包类型,SDES为202uint16_t len;//包长度//-----------------------源描述块(开始)-----------------------//	一个SDES包可以有多个描述块uint8_t item_type;//源类型,8位uint8_t item_len;//源长度,8位//???   item_data;//源数据,长度根据item_len而定//-----------------------源描述块(结束)-----------------------/* ......这里还可以有n个源描述块...... */
} SDES;

常用源类型

CNAME唯一标识
NAME源名
EMAIL邮箱
PHONE电话
LOC位置
TOOL所用工具
NOTE备注

1.4 BYE

数据结构

typedef struct BYE {uint8_t RC : 5;//源描述块计数器uint8_t P : 1;//扩展位uint8_t version : 2;//RTCP版本号uint8_t PT;//包类型,BYE为203uint16_t len;//包长度uint32_t ssrc_of_sender;//发送BYE的发送端的SSRC/*这里还可以有多个ssrc_of_sender*//*以下为可选项*///???变长 reason; //断开连接的原因
} BYE;

http://www.ppmy.cn/news/1526038.html

相关文章

Acwing 区间合并

区间合并 主要思想:给定很多区间。若两个区间有交集,将二者合并成一个区间。 具体做法: 先按照区间的左端点进行排序然后遍历每个区间,根据不同的情况进行合并,有一下几种情况: 第一种情况,区间不变&…

【Scala入门学习】Scala的方法和函数

1. 方法 在scala中的操作符都被当成方法存在,比如说、-、*、/ 12就是1.(2)的调用, 2.0 是doule类型,强调用Int类型的写法为1.(2:Int) 1.1 方法的声明和使用 定义方法的语法: def 方法名([变量:变量类型&#xff…

C++竞赛初阶L1-15-第六单元-多维数组(34~35课)556: T456506 矩阵转置

题目内容 输入一个 n 行 m 列的矩阵 A,输出它的转置 AT。 输入格式 第一行包含两个整数 n 和 m,表示矩阵 A 的行数和列数。1≤n≤100,1≤m≤100。 接下来 n 行,每行 m 个整数,表示矩阵 A 的元素。相邻两个整数之间用单个空格隔开,每个元素均在 1∼1000 之间。 输出格…

移动订货小程序哪个好 批发订货系统源码哪个好

订货小程序就是依托微信小程序的订货系统,微信小程序订货系统相较于其他终端的订货方式,能够更快进入商城,对经销商而言更为方便。今天,我们一起盘点三个主流的移动订货小程序,看看哪个移动订货小程序好。 第一、核货宝…

【MyBatis---快速学习和复习】

学习视频(强推):【MyBatis视频零基础入门到进阶,MyBatis全套视频教程源码级深入详解】 https://www.bilibili.com/video/BV1JP4y1Z73S/?p134&share_sourcecopy_web&vd_source4d877b7310d01a59f27364f1080e3382 MyBatis中…

Go语言错误处理详解

Go语言以其简洁、高效和并发能力著称。在实际开发中,错误处理是一个不可避免且至关重要的部分。本文将深入探讨Go语言中的错误处理机制,涵盖其原理、使用方法、最佳实践,并提供丰富的代码示例和中文注释。 一、错误处理的基本概念 在Go语言…

STL02——手写简单版本的list

手写一个简单版本的list 设计一个名为 List 的 List 类,该类具有以下功能和特性: 1、基础成员函数 构造函数:初始化 List 实例析构函数:清理资源,确保无内存泄露 2、核心功能 在 List 末尾添加元素在 List 开头添…

【Gateway】网关服务快速上手

微服务的接口都是直接对外暴露的,可以直接通过外部访问,为了保证对外服务的安全性服务端实现的微服务接口通常都带有一定的权限校验机制,由于使用了微服务,原本一个应用的的多个模块拆分成了多个应用,我们不得不实现多次校验逻辑,当这套逻辑需要修改时,我们需要修改多个应用,加…

数据脱敏 (Jackson + Hutool 工具包)

一、简介 系统使用 Jackson 序列化策略,对标注了 Sensitive 注解的属性进行脱敏处理 基于Hutool 脱敏案列: Retention(RetentionPolicy.RUNTIME) Target(ElementType.FIELD) JacksonAnnotationsInside// 表示只对有此注解的字段进行序列化 JsonSeriali…

【超详细】Plaxis软件简介、 Plaxis Python API环境搭建、自动化建模、Python全自动实现、典型岩土工程案例实践应用

查看原文>>>【案例教程】PLAXIS软件丨自动化建模、典型岩土工程案例解析、模型应用、数据分析、图表制作 目录 第一部分:Plaxis软件简介及 Plaxis Python API环境搭建 第二部分:Plaxis自动化建模-基础案例 第三部分:进阶案例-Pyt…

neo4j docker 运行4.35 community 版本失败

运行脚本 sudo docker run -d \ --name container_name \ -p 27474:7474 \ -p 27687:7687 \ -v /home/neo4j/data:/data \ -v /home/neo4j/logs:/logs \ -v /home/neo4j/conf:/var/lib/neo4j/conf \ -v /home/neo4j/import:/var/lib/neo4j/import \ -v /home/lighthouse/tcmkg…

redis常见的数据类型?

参考:一文读懂Redis五种数据类型及应用场景 - 知乎 (zhihu.com) String 类型 String 类型:Redis 最基本的数据类型,它是二进制安全的,意味着你可以用它来存储任何类型的数据,如图片、序列化对象等。使用场景&#xff…

智慧交通基于yolov8的行人车辆检测计数系统python源码+onnx模型+精美GUI界面

【算法介绍】 智慧交通中,基于YOLOv8的行人车辆检测计数系统是一项高效、准确的技术解决方案。该系统利用YOLOv8这一先进的目标检测算法,结合深度学习技术,能够实时检测并准确计数道路上的行人和车辆。YOLOv8在保证检测速度的同时&#xff0…

SprinBoot+Vue爱老助老服务平台的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

oracle 表的外键

表的外键 3.5.1表之间的三种关系 在数据库设计中,工作中经常会分析商业逻辑中的表的设计。在设计表的关系之前,需要先了解关系型数据库特点。关系数据库有如下特点: 关系型数据库采用了关系模型来组织数据的数据库。 关系型数据库的最大特点…

C#笔记11 获取线程及其信息,什么是优先级、单元状态、线程状态、执行状态、线程名称以及其他属性?

前文讲完了在C#中线程怎么创建,怎么删除,怎么启动,怎么阻止。 现在来看看线程本身的属性。 当前线程 首先要获得当前线程,才能获取线程信息,此属性用于获取当前运行的线程。此属性可用于获取代码当前执行所在的线程…

qt下两种方式读取opencv 图片各个通道的值

qt下两种方式读取opencv 图片各个通道的值 Mat srcImg imread("D:\\1.jpg");if(srcImg.empty()){QMessageBox::information(this,"警告","图片读取失败,请检查图片路径!");return;}Mat imgShow ;cvtColor(srcImg, imgSho…

企微机器人:企业数字化转型的得力助手

在数字化转型的浪潮中,企业对于提高运营效率、降低人力成本的需求日益迫切。企微机器人,作为基于企业微信平台开发的一种智能工具,以其高度自动化、灵活性强、安全性高和易于使用的特点,迅速成为企业内部的得力助手。本文将深入探…

udp的广播,多播,单播 demo

enum class EMsgType:uint8_t { EMSGT_SINGLE,//单播 EMSGT_MULTICAST,//多播 EMSGT_BROADCAST,//广播 }; sendSocket new QUdpSocket(this); sendSocket->setSocketOption(QAbstractSocket::MulticastTtlOption, 1); sendSocket->bind(QHostAddress::AnyIPv4, 0,QUdpSoc…

Qt 弹出菜单右键菜单 QMenu 设置不同颜色的子项

概述 在Qt中,可以使用样式表(StyleSheet)来自定义 QMenu 的外观,包括其子项(如菜单项QAction)的颜色。但是,这通常可以设置 QMenu 的整体样式,而不能单独设置某个子项的颜色。不过&…