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

RTP over TCP 模式

RTP over TCP 模式概述

RTP over TCP 指的是将RTP数据包封装在TCP连接中进行传输,而不是使用传统的基于UDP的传输方式。

与UDP模式对比

特性RTP over TCPRTP over UDP
端口数量仅需 1 个 TCP 端口(默认 554)每路流需 2 个 UDP 端口(数据+控制)
可靠性依赖 TCP 重传机制,数据无丢失可能丢包,影响实时性
防火墙兼容性易穿透(常用端口 554)需开放多个端口,易被拦截
延迟较高(重传机制引入延迟)较低(无连接、无重传)
适用场景高丢包网络(如互联网)、防火墙环境低延迟需求(局域网、专网)

工作原理

在RTSP的RTP over TCP模式下,RTP和RTCP数据被“隧道化”到RTSP控制连接中,通常使用基于分隔符的帧间发送(Interleaved Mode)。具体流程如下:

  1. 建立RTSP连接:客户端与服务器之间首先建立一个RTSP的TCP连接,通常是在端口554上。
  2. SETUP 阶段协商
    客户端在 SETUP 请求中指定传输方式为 TCP,并分配交织通道号:
    Transport: RTP/AVP/TCP;interleaved=0-1
    

在这里插入图片描述

  • 0-1 表示视频流:0 为 RTP 数据通道(偶数),1 为 RTCP 控制通道(奇数)。
  • 音频流通常分配 2-3 通道。
  1. 发送RTP/RTCP数据:在同一个TCP连接上,RTP和RTCP数据通过特定的通道(通常是通过RTSP“interleaving”机制,即在RTSP消息中嵌入RTP数据)进行传输。每个RTP/RTCP包前面会有一个标识符(通常是“$”符号后跟通道号),以区分不同类型的数据。
  2. 数据封装格式
    每个 RTP/RTCP 包添加 4 字节头部,结构如下:
字段长度说明
Magic Number1 字节固定值 0x24(ASCII 字符 $),用于标识 RTP/RTCP 数据包。
Channel Number1 字节通道号(如 0 代表 RTP 视频数据,1 代表 RTCP 视频控制)。
Embedded Data Len2 字节后续 RTP/RTCP 数据包的长度(网络字节序)。
DataN 字节实际的 RTP 或 RTCP 数据包

RTCP SR数据包封装:
RTCP数据包封装
视频RTP包封装:
RTP封装

参考资源

  1. RFC 4571
    Interleaved RTP over TCP

  2. RFC 4571
    Embedded (Interleaved) Binary Data

  3. RTP/AVP & RTP/AVP/TCP

http://www.xdnf.cn/news/10863.html

相关文章:

  • 如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)
  • 4-C#的不同窗口传值
  • 洛谷P12610 ——[CCC 2025 Junior] Donut Shop
  • 转战海外 Web3 远程工作指南
  • (10)Fiddler抓包-Fiddler如何设置捕获Firefox浏览器的Https会话
  • 双周报Vol.73:移除使用方法实现 trait 、新增了 “错误多态” 功能、.语法支持使用 _ 的匿名函数...
  • 16QAM在瑞利信道下的性能仿真:从理论到实践的完整解析(附完整代码)
  • 【HarmonyOS 5】鸿蒙Taro跨端框架
  • 【TMS570LC4357】之相关驱动开发学习记录1
  • 总结:线程安全问题的原因和解决方案
  • 初识vue3(vue简介,环境配置,setup语法糖)
  • LlamaIndex的IngestionPipeline添加本地存储(本地文档存储)
  • Unity 环境搭建
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(四)
  • Python中join()方法完全指南:参数要求与常见用法解析
  • 【深度学习新浪潮】以Dify为例的大模型平台的对比分析
  • 38、响应处理-【源码分析】-HTTPMessageConverter原理
  • C++.双指针算法(1.1目录修正)
  • CA-Net复现
  • 多租户系统的实现方式
  • 第四十天打卡
  • 统计字符数
  • 「Java教案」算术运算符与表达式
  • #16 学习日志软件测试
  • 论文写作核心要点
  • 《高等数学》(同济大学·第7版)第一章第四节《无穷小与无穷大》的超级详细
  • 如何提升大模型召回率和实战案例
  • 页岩油试油试采
  • 深入理解C++面向对象编程:类与对象全面指南
  • 安装DockerDocker-Compose