工业数字化—IoT建设学习笔记(5):流媒体——RTSP、RTCP、RTP协议
目录
1、什么是流媒体?
流媒体(Streaming Media)是一种边传输边播放的多媒体数据传输与播放技术,核心特点是无需等待完整文件下载完成,就能实时观看 / 收听音视频内容。
简单来说,传统下载模式是 “先下载,后播放”(比如下载一部电影到本地再打开),而流媒体模式是 “边下载,边播放”(比如看在线直播、刷短视频)。
1.1 核心技术原理
(1)数据分片发送端(服务器)会把完整的音视频文件切割成一个个小数据包(通常是几秒的内容),并按顺序传输。
(2)缓冲机制接收端(播放器)会先缓存一小部分数据包(缓冲区),再开始播放。缓冲的作用是抵消网络波动带来的延迟,避免播放卡顿。
(3)协议支撑流媒体的传输依赖专门的协议,常见的有:
- 传输层协议:RTP(实时传输协议)+ RTCP(实时传输控制协议),负责数据传输和质量监控。
- 应用层协议:RTSP(实时流协议,多用于摄像头、监控)、HLS(基于 HTTP 的流媒体协议,多用于如抖音、快手的等手机短视频平台、腾讯视频、爱奇艺等影视 APP的在线播放)、RTMP(实时消息传输协议,低时延,多用于如斗鱼、虎牙等电竞直播)。
1.2 流媒体的分类
根据传输内容和场景,流媒体主要分为两类:
(1)实时流媒体
- 特点:延迟极低(通常几秒内),数据实时生成、实时传输,不存储在服务器。
- 典型场景:直播(游戏直播、赛事直播)、视频会议、安防监控、车载摄像头实时回传。
(2)点播流媒体
- 特点:音视频文件预先存储在服务器,用户按需点播,可暂停、快进、后退。
- 典型场景:短视频平台、影视点播网站(如腾讯视频、Netflix)。
1.3 典型应用场景
- 日常娱乐:短视频、网络电影、音乐流媒体(如网易云音乐)。
- 实时互动:视频会议、在线教育直播、电商直播。
- 物联网 / 车联网:车载摄像头实时监控、智能家居摄像头远程查看、无人机实时画面回传。
- 安防领域:监控摄像头的实时视频流传输与查看。
2、RTSP、RTCP、RTP协议
RTSP、RTCP、RTP 是一套协同工作的实时流媒体协议簇,主要用于音视频实时传输场景(如监控直播、视频会议、车载摄像头回传等)。三者分工明确:RTP 负责数据传输、RTCP 负责质量监控、RTSP 负责会话控制,共同保障实时流的稳定、低延迟传输。
2.1 RTP(实时传输协议)
2.1.1 核心定位
RTP ( Real-time Transport Protocol)即实时传输协议,是传输层协议,核心作用是承载并传输实时音视频数据,为数据包添加标识信息,让接收端能正确解析、同步、重排数据。它通常基于 UDP 传输(延迟低、实时性好),也可基于 TCP(可靠性高但延迟增加),本身不提供可靠传输(无重传机制),更适合容忍少量丢包的实时场景。
2.1.2 RTP 数据包
RTP 数据包由 RTP 头部 和 负载(音视频数据) 两部分组成,头部长度固定为 12 字节,结构如下:
| 字段(比特) | 长度 | 作用 |
|---|---|---|
| 版本(V) | 2 | 固定为 2(RTP 版本 2) |
| 填充位(P) | 1 | 标记数据包是否有填充字节(用于适配底层传输单元) |
| 扩展位(X) | 1 | 标记是否有扩展头部 |
| CSRC 计数(CC) | 4 | 贡献源标识符数量(通常用于混音场景) |
| 标记位(M) | 1 | 关键标记(如视频帧的边界、音频的静音检测点) |
| 负载类型(PT) | 7 | 标识负载数据的编码格式(如 H.264 对应 96、G.711 音频对应 0) |
| 序列号 | 16 | 每发送一个包递增 1,接收端用于检测丢包、乱序重排 |
| 时间戳 | 32 | 反映数据包中第一个字节的采样时间,单位由负载类型决定(如视频常用 90000Hz),用于音视频同步、平滑播放 |
| SSRC | 32 | 同步源标识符,唯一标识一个数据流(如一个摄像头的视频流),避免同一会话中多个流混淆 |
| CSRC 列表 | 0~15×32 | 可选,记录贡献源(如多人连麦的混音源) |
2.1.3 核心特性
- 无连接:无需建立连接即可传输数据,适配实时场景的低延迟需求。
- 流标识:通过 SSRC、负载类型区分不同数据流和编码格式。
- 同步支持:时间戳是实现音视频同步的核心(如视频帧与音频帧时间戳对齐)。
2.2 RTCP(实时传输控制协议)
2.2.1 核心定位
RTCP (Real-time Transport Control Protocol)即实时传输控制协议,是 RTP 的配套协议,同样工作在传输层,核心作用是 监控 RTP 传输质量、反馈控制信息、同步时钟,是保障实时流稳定性的 “监控员”。
2.2.2 与 RTP 的关联
- RTCP 与 RTP 成对使用,共用同一个会话。
- 端口分配:RTCP 端口号 = 对应 RTP 端口号 + 1(如 RTP 用 5004,则 RTCP 用 5005)。
- 传输频率:RTCP 包发送频率远低于 RTP,通常每 5 秒发送一次,避免占用过多带宽。
2.2.3 核心报文
RTCP 报文分为多种类型,核心是 发送者报告(SR) 和 接收者报告(RR):
| 报文类型 | 发送方 | 核心作用 |
|---|---|---|
| SR(发送者报告) | RTP 数据发送端(如车载 T-BOX) | 1. 包含发送端的时钟信息(NTP 时间戳),用于接收端时钟校准;2. 统计已发送的 RTP 包数量、字节数;3. 帮助接收端实现音视频同步 |
| RR(接收者报告) | RTP 数据接收端(如手机监控 APP) | 1. 统计接收的 RTP 包丢包率、延迟、抖动;2. 将统计结果反馈给发送端;3. 发送端根据反馈调整编码码率或传输策略 |
| SDES(源描述报文) | 所有参与者 | 携带数据源的描述信息(如摄像头名称、编码格式) |
| BYE(结束报文) | 退出会话的参与者 | 通知其他参与者自己退出会话,释放资源 |
2.2.4 核心作用
- 质量监控:接收端通过 RR 报文向发送端反馈网络状况(如丢包率过高)。
- 动态调参:发送端根据 RTCP 反馈调整参数(如降低码率、切换分辨率)。
- 时钟同步:通过 SR 报文的 NTP 时间戳,统一会话内所有设备的时钟,避免播放卡顿。
2.3 RTSP(实时流协议)
2.3.1 核心定位
RTSP(Real Time Streaming Protocol)即实时流协议, 是应用层协议,核心作用是 控制流媒体会话的生命周期,相当于实时流的 “遥控器”—— 它只传输控制指令,不传输音视频数据。
2.3.2 核心特点
- 控制与数据分离:RTSP 负责发送 “播放、暂停、快进” 等指令,音视频数据由 RTP 传输。
- 基于客户端 - 服务器模型:客户端(如手机 APP)向服务器(如车载 T-BOX)发送指令,服务器响应并执行操作。
- 默认端口:554(TCP/UDP 均可,常用 TCP 保证指令可靠传输)。
2.3.3 核心指令
RTSP 定义了一系列控制指令,覆盖会话的建立、运行、关闭全流程:
| 指令 | 功能 | 应用场景 |
|---|---|---|
OPTIONS | 查询服务器支持的 RTSP 指令 | 会话初始化第一步,客户端获取服务器能力 |
DESCRIBE | 获取流媒体的 SDP(会话描述协议)信息 | 客户端获取音视频编码格式(如 H.264)、传输协议(如 UDP) |
SETUP | 协商 RTP/RTCP 传输通道 | 客户端与服务器约定 RTP/RTCP 端口号、传输协议,建立数据通道 |
PLAY | 启动 RTP 数据传输 | 客户端下发播放指令,服务器开始发送音视频数据 |
PAUSE | 暂停 RTP 数据传输 | 客户端暂停播放,服务器停止发送数据(会话不关闭) |
TEARDOWN | 关闭会话,释放资源 | 客户端结束监控,服务器关闭 RTP/RTCP 端口,清理会话 |
GET_PARAMETER | 查询会话参数(如当前码率) | 客户端实时获取流的状态信息 |
SET_PARAMETER | 设置会话参数(如调整码率) | 客户端主动调整流的传输参数 |
2.3.4 核心特性
- 会话控制:支持精细的会话控制(暂停后可继续播放,无需重新建立会话)。
- 适配多种场景:不仅支持实时直播,也支持点播(如回放摄像头历史录像)。
- 与 RTP/RTCP 强绑定:RTSP 的
SETUP指令是 RTP/RTCP 建立传输通道的前提。
2.4 三者核心区别总结
| 维度 | RTSP | RTP | RTCP |
|---|---|---|---|
| 协议层级 | 应用层 | 传输层 | 传输层 |
| 核心功能 | 控制会话(播放 / 暂停 / 关闭) | 传输音视频数据 | 监控传输质量、反馈控制 |
| 传输内容 | 控制指令 | 音视频数据包 | 统计报告、控制反馈 |
| 典型端口 | 554 | 动态端口(如 5004) | RTP 端口 +1(如 5005) |
| 可靠性 | 基于 TCP,指令可靠传输 | 基于 UDP,不保证可靠 | 基于 UDP,不保证可靠 |
3、RTSP、RTCP、RTP协作过程
上文提到RTSP、RTCP、RTP 是一套协同工作的实时流媒体协议簇,三者分工明确:
- RTP 负责实时数据传输(音视频数据包);
- RTCP 负责传输质量监控与反馈;
- RTSP 负责流媒体会话的控制(播放、暂停、快进等指令)。
三者结合是安防监控、车载摄像头、视频会议等低延迟实时流场景的核心技术方案。
三者的协作遵循 “RTSP 控管、RTP 传数据、RTCP 保质量” 的原则,整体流程分为 会话建立、数据传输、会话关闭 三个阶段。
3.1 具体实例:车载摄像头实时监控场景
以车联网车载 T-BOX 远程查看车内摄像头画面为例,详细说明三者如何协作:
3.1.1 场景前提
- 发送端:车载摄像头(编码器)+ 车载 T-BOX(网络模块)。
- 接收端:手机 APP(远程监控端)。
- 传输目标:低延迟(<3 秒)传输摄像头实时画面。
3.1.2 协作流程(分 5 步)
1. RTSP 会话初始化:建立控制通道
(1)手机 APP 向车载 T-BOX 发送 OPTIONS 指令:RTSP://[车载T-BOX IP]:554/stream1 OPTIONS,查询 T-BOX 支持的 RTSP 指令。
(2)T-BOX 回复支持的指令列表(OPTIONS, DESCRIBE, SETUP, PLAY, PAUSE, TEARDOWN)。
(3)APP 发送 DESCRIBE 指令:获取摄像头流的 SDP(会话描述协议)信息,内容包括:
- 视频编码格式:H.264;
- 音频编码格式:G.711(若有);
- 传输协议:UDP。
(4)APP 发送 SETUP 指令:协商 RTP/RTCP 传输通道,指定端口:
- 视频 RTP 端口:5004,RTCP 端口:5005;
- 音频 RTP 端口:5006,RTCP 端口:5007(若有);
- T-BOX 确认端口分配,控制通道建立完成。
2. RTSP 启动流传输:下发播放指令
APP 向 T-BOX 发送 PLAY 指令:RTSP://[车载T-BOX IP]:554/stream1 PLAY,T-BOX 收到指令后,命令摄像头开始编码并准备发送数据。
3. RTP 传输实时音视频数据:核心数据通道
(1)车载摄像头将实时画面编码为 H.264 帧,T-BOX 将每一帧切割为 RTP 数据包,并添加头部信息:
- 序列号:从 0 开始递增(如第 1 包序列号 0,第 2 包 1……);
- 时间戳:基于摄像头的采样时钟(如 90000Hz 时钟频率,每帧对应一个时间戳);
- 负载类型 PT:96(自定义值,对应 H.264 编码);
- SSRC:12345(唯一标识摄像头数据流)。
(2)T-BOX 通过 UDP 协议,将 RTP 数据包发送到手机 APP 指定的 5004 端口。
(3)手机 APP 接收 RTP 包后,根据序列号重排乱序的数据包,根据时间戳对齐音视频(若有音频),再解码为可显示的画面。
4. RTCP 监控传输质量:动态调参
(1)手机 APP 实时统计 RTP 包的丢包率、延迟、抖动,并生成 RTCP 接收者报告(RR),通过 5005 端口发送给 T-BOX。
例如:报告内容为 “丢包率 5%,网络抖动 100ms”。
(2)T-BOX 收到 RTCP 报告后,若丢包率过高,动态调整摄像头的编码码率(如从 2Mbps 降到 1Mbps),降低网络压力。
(3)T-BOX 也会发送 RTCP 发送者报告(SR),包含自身的时钟信息,帮助 APP 校准时间戳,保证播放流畅。
5. RTSP 关闭会话:释放资源
用户在手机 APP 点击 “停止监控”,APP 发送 TEARDOWN 指令,T-BOX 收到后停止发送 RTP 数据,关闭 RTP/RTCP 端口,释放会话资源。
3.1.3 三者协作的核心总结
| 协议 | 角色定位 | 与其他协议的关系 |
|---|---|---|
| RTSP | 控制者 | 指挥 RTP 启动 / 停止传输,不参与数据传输 |
| RTP | 数据搬运工 | 接收 RTSP 的指令,承载音视频数据;接受 RTCP 的监控 |
| RTCP | 质量监控员 | 监控 RTP 的传输状态,向发送端反馈,优化传输质量 |
简单来说:RTSP 负责 “发号施令”,RTP 负责 “送货上门”,RTCP 负责 “验货反馈”,三者缺一不可,共同实现低延迟、高质量的实时流媒体传输。
3.2 RTSP+RTP/RTCP 协议交互时序图
以下时序图以车载摄像头远程监控为典型场景,清晰展示客户端(手机 APP) 与 服务端(车载 T-BOX + 摄像头) 之间的协议交互流程,涵盖会话建立、数据传输、质量监控、会话关闭四个核心阶段。
说明:
核心端口:RTSP 默认 554,RTP 端口 5004,RTCP 端口 5005
时序图如下:
┌───────────────┐ ┌───────────────┐
│ 客户端 │ │ 服务端 │
│ (手机APP) │ │(车载T-BOX) │
└───────┬───────┘ └───────┬───────┘
│ │
│ 1. OPTIONS 请求 【RTSP】 │
│────────────────────────────────>│
│ │
│ 2. OPTIONS 响应(支持的指令)【RTSP】 │
│<────────────────────────────────│
│ │
│ 3. DESCRIBE 请求(获取SDP)【RTSP】 │
│────────────────────────────────>│
│ │
│ 4. DESCRIBE 响应(SDP信息)【RTSP】 │
│<────────────────────────────────│
│ (含编码格式、传输协议等) │
│ │
│ 5. SETUP 请求(协商RTP/RTCP)【RTSP】 │
│ (指定RTP:5004,RTCP:5005) │
│────────────────────────────────>│
│ │
│ 6. SETUP 响应(通道建立成功)【RTSP】 │
│<────────────────────────────────│
│ │
│ 7. PLAY 指令(启动流传输)【RTSP】 │
│────────────────────────────────>│
│ │
│ 8. PLAY 响应(开始传输数据)【RTSP】 │
│<────────────────────────────────│
│ │
│ 9. RTP 音视频数据传输(持续)【RTP】 │
│<────────────────────────────────│
│ (带序列号、时间戳、SSRC) │
│ │
│ 10. RTCP 报告交互(周期性)【RTCP】 │
│<────────── SR 报告 ────────────│ 【RTCP】服务端发送SR(时钟+发送统计)
│ │
│────────── RR 报告 ────────────>│ 【RTCP】客户端发送RR(丢包+延迟统计)
│ │
│ 11. PAUSE 指令(可选,暂停)【RTSP】 │
│────────────────────────────────>│
│ │
│ 12. PAUSE 响应(停止发RTP)【RTSP】 │
│<────────────────────────────────│
│ │
│ 13. TEARDOWN 指令(关闭会话)【RTSP】 │
│────────────────────────────────>│
│ │
│ 14. TEARDOWN 响应(释放资源)【RTSP】 │
│<────────────────────────────────│
│ │
│ 结束 │
│ │
时序阶段详细说明如下:
阶段 1:RTSP 会话初始化(1-6 步)
- 核心目标:建立 RTSP 控制通道,协商 RTP/RTCP 传输参数。
- 关键动作:
OPTIONS:客户端查询服务端支持的 RTSP 指令集。DESCRIBE:客户端获取 SDP 信息,包含音视频编码格式(如 H.264)、传输协议(UDP/TCP)。SETUP:客户端指定 RTP/RTCP 端口,服务端确认后,数据传输通道建立。
阶段 2:RTP 数据传输(7-9 步)
- 核心目标:服务端向客户端推送实时音视频流。
- 关键动作:
PLAY:客户端下发播放指令,服务端触发摄像头编码。- RTP 持续传输:服务端将编码后的音视频帧封装为 RTP 包,通过 UDP 5004 端口发送,包内携带序列号、时间戳、SSRC,保证客户端能重排、同步数据。
阶段 3:RTCP 质量监控(10 步)
- 核心目标:监控传输质量,动态优化流参数。
- 关键动作:
- 服务端发 SR:每 5 秒发送一次,包含 NTP 时间戳(校准客户端时钟)、已发送 RTP 包数量 / 字节数。
- 客户端发 RR:每 5 秒发送一次,包含丢包率、网络抖动、延迟等统计数据。
- 动态调优:服务端收到 RR 后,若丢包率过高,自动降低摄像头编码码率。
阶段 4:会话控制与关闭(11-14 步)
- 核心目标:暂停 / 恢复 / 终止会话,释放资源。
- 关键动作:
PAUSE(可选):客户端暂停播放,服务端停止发送 RTP 包,会话不释放(可通过PLAY恢复)。TEARDOWN:客户端关闭会话,服务端释放 RTP/RTCP 端口、停止摄像头编码,彻底结束交互。
火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。
更多推荐
所有评论(0)