RTSP场景下的RTP与RTCP

news/2025/2/23 5:21:50

一、RTP 数据包格式(RFC 3550 Section 5.1)

1. RTP 头部结构
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |       Sequence Number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Timestamp                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           SSRC                                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           CSRC (可选)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Payload                            |
|                              ...                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
2. 字段详解
字段长度说明
V (Version)2 bits版本号,固定为 2(二进制 10)。
P (Padding)1 bit填充位。1 表示包尾有填充字节(用于对齐加密块)。
X (Extension)1 bit扩展头标志。1 表示存在扩展头(RFC 5285 定义)。
CC (CSRC Count)4 bitsCSRC 标识符的数量(范围 0~15)。
M (Marker)1 bit标记位,载荷类型相关。例如:视频流中 1 表示帧结束。
PT (Payload Type)7 bits载荷类型(如 96 表示 H.264,需通过 SDP 的 a=rtpmap 映射)。
Sequence Number16 bits序列号,每发送一个 RTP 包递增 1,用于检测丢包和乱序。
Timestamp32 bits时间戳,基于媒体时钟(如视频 90 kHz,音频 44.1 kHz)。
SSRC32 bits同步源标识符,随机生成,唯一标识一个媒体源。
CSRC32 bits贡献源列表(可选),最多 15 个 SSRC,用于混流场景。
Payload可变媒体数据(如 H.264 NALU、AAC 帧)。

二、RTCP 控制包格式(RFC 3550 Section 6)

1. RTCP 通用头部

所有 RTCP 包共享以下头部结构:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|   RC    |       PT      |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            Payload                            |
|                              ...                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段长度说明
V (Version)2 bits版本号,固定为 2
P (Padding)1 bit填充位。1 表示包尾有填充字节(与 RTP 类似)。
RC (Reception Count)5 bits接收报告块数量(仅用于 SR/RR)。
PT (Packet Type)8 bits包类型(如 200=SR,201=RR,202=SDES,203=BYE)。
Length16 bitsRTCP 包的总长度(以 32 位字为单位,减 1)。

2. Sender Report (SR) 报文格式
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|   RC=5  |      PT=200   |             Length=28          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           SSRC of Sender                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         NTP Timestamp (64 bits)                |
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         RTP Timestamp (32 bits)                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Sender's Packet Count                  |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Sender's Octet Count                   |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          SSRC_1 (SSRC of first source)                         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Fraction Lost |       Cumulative Lost                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Extended Highest Sequence Number                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Jitter (32 bits)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Last SR Timestamp                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Delay Since Last SR                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段详解

  • NTP Timestamp:64 位 NTP 时间戳(高 32 位为秒,低 32 位为小数秒)。
  • RTP Timestamp:与 NTP 时间戳对应的 RTP 时间戳。
  • Sender’s Packet/Octet Count:发送端累计发送的包数和字节数。
  • SSRC_1:接收报告块的 SSRC(最多 31 个接收报告)。

3. Receiver Report (RR) 报文格式
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|   RC=1  |      PT=201   |             Length=7           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           SSRC of Receiver                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           SSRC of Source                       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Fraction Lost         |       Cumulative Lost         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           Extended Highest Sequence Number                     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Jitter (32 bits)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Last SR Timestamp                      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Delay Since Last SR                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

关键 QoS 字段

  • Fraction Lost:8 位无符号整数,丢包率 = Fraction Lost / 256.0 * 100%
  • Cumulative Lost:24 位无符号整数,累计丢包数。
  • Extended Highest Sequence Number:32 位序列号(高 16 位为循环计数)。
  • Jitter:32 位无符号整数,抖动值(单位:RTP 时间戳间隔的 1/16)。
  • Last SR Timestamp:最近收到的 SR 包中的 NTP 时间戳(中间 32 位)。
  • Delay Since Last SR:从收到 SR 到发送 RR 的延迟(单位:1/65536 秒)。

4. Source Description (SDES) 报文格式
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|   RC=1  |      PT=202   |             Length=3           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           SSRC/CSRC                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     CNAME=1    |     Length    |       user@example.com...     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     NAME=2     |     Length    |         John Doe...           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     END=0      |                    Padding                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明

  • CNAME:规范名(必选),格式为 user@host 或随机字符串,用于跨流同步。
  • NAME/EMAIL/PHONE:可选描述字段。
  • END:0 字节结束标记。

5. BYE 报文格式
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|   RC=1  |      PT=203   |             Length=1           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           SSRC/CSRC                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|     Reason     |    Length     |       "Network Error"...      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段说明

  • Reason:可选,ASCII 编码的离开原因(如 “Network Error”)。

三、RTCP 复合包示例

一个典型的 RTCP 复合包可能包含多个报告:

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          SR (Sender Report)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          SDES (CNAME)                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          BYE (Leave Reason)                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

四、QoS 参数计算规则(RFC 3550 Appendix A)

1. 丢包率(Fraction Lost)
expected = highest_seq - initial_seq + 1
received = packets_received
lost = expected - received
fraction_lost = (lost << 8) / expected  // 结果范围 0~255
2. 抖动(Jitter)
// 对于第 i 个包:
arrival_time = current_time - initial_time
transit_time = arrival_time - rtp_timestamp
previous_transit = transit_time of packet i-1
D(i) = |transit_time - previous_transit|
jitter = jitter + (D(i) - jitter) / 16
3. 往返时间(RTT)
// 接收端计算:
last_sr_ntp = (SR 包中的 NTP 时间戳)
delay_since_last_sr = (收到 SR 到发送 RR 的延迟)
rtt = current_ntp_time - last_sr_ntp - delay_since_last_sr

五、总结

  • RTP:负责媒体数据传输,通过序列号和时间戳支持实时播放。
  • RTCP:通过 SR/RR 报文实现网络质量监控,SDES/BYE 维护会话元数据。
  • QoS 控制:基于丢包率、抖动、RTT 动态调整缓冲区或码率(需应用层逻辑)。
  • 协议扩展:RFC 3550 为基础,NACK/PLI/REMB 等高级功能需参考后续 RFC(如 4585、5104)。

http://www.niftyadmin.cn/n/5862977.html

相关文章

微信小程序数据绑定与事件处理:打造动态交互体验

在上一篇中&#xff0c;我们学习了如何搭建微信小程序的开发环境并创建了一个简单的“Hello World”页面。然而&#xff0c;一个真正的小程序不仅仅是静态内容的展示&#xff0c;它需要与用户进行动态交互。本文将深入探讨微信小程序中的数据绑定和事件处理机制&#xff0c;通过…

为Eclipse IDE安装插件IBM编程助手watsonx Code Assistant

从Eclipse IDE 安装 从Eclipse IDE 安装插件&#xff1a; _1、在Eclipse IDE 中&#xff0c;单击帮助菜单&#xff0c;然后选择EclipseMarketplace。 _2、根据您计划进行的工作类型选择安装方式&#xff1a; 有关代码建议、代码解释、代码文档和单元测试的集成生成式人工智能&a…

金融学-金融机构

前言 金融机构在金融体系运行体系运营中起着不可获缺的关键作用.如规则的制定与监管-中央银行,体系的运营证券公司,体系的供贷的参与者金融中介.本章将用一种说明我们的金融体系是怎样改进经济效率的经济分析,来讲述相关金融机构 金融结构的经济学分析 世界各国的金融体系在…

Java集合框架(知识整理)

集合框架 Java 集合框架可以分为两条大的支线: 1、Collection,主要由 List、Set、Queue 组成: List 代表有序、可重复的集合,典型代表就是封装了动态数组的 ArrayList 和封装了链表的 LinkedList;Set 代表无序、不可重复的集合,典型代表就是 HashSet 和 TreeSet;Queue …

【CS285】高斯策略对数概率公式的学习笔记

公式介绍 在【CS285】中提到了高斯策略对数概率公式的公式如下&#xff1a; log ⁡ π θ ( a t ∣ s t ) − 1 2 ∥ f ( s t ) − a t ∥ Σ 2 const \log \pi_{\theta}(\mathbf{a}_t | \mathbf{s}_t) -\frac{1}{2} \left\| f(\mathbf{s}_t) - \mathbf{a}_t \right\|_{\S…

深入理解HttpSecurity的设计

一、HttpSecurity的应用 在前章节的介绍中我们讲解了基于配置文件的使用方式,也就是如下的使用。 也就是在配置文件中通过 security:http 等标签来定义了认证需要的相关信息,但是在SpringBoot项目中,我们慢慢脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity…

账号存活率骤降19%?2025跨境账号安全白皮书预警

账号安全危机来袭&#xff0c;跨境电商如何应对挑战&#xff1f; 在全球电商产业快速扩张的今天&#xff0c;账号安全问题日益严峻&#xff0c;尤其是在跨境电商领域。根据2025年《跨境账号安全白皮书》的报告&#xff0c;跨境电商平台账号存活率骤降19%&#xff0c;这一令人震…

2025.2.23机器学习笔记:PINN文献阅读

2025.2.23周报 一、文献阅读题目信息摘要Abstract创新点网络架构架构A架构B架构C 实验结论后续展望 一、文献阅读 题目信息 题目&#xff1a; Physics-Informed Neural Networks for Modeling Water Flows in a River Channel期刊&#xff1a; IEEE TRANSACTIONS ON ARTIFICI…