深入理解 RTP、RTCP、RTMP、RTSP、HLS 及 live555 推拉流实现
流媒体技术在音视频传输中起着关键作用,其中 RTP、RTCP、RTMP、RTSP 和 HLS 是最常见的协议。本文将详细介绍它们的区别,并探讨为什么 HLS 逐渐取代 RTMP。此外,还将解析 RTSP 作为控制协议的作用,并讲解 live555 如何实现音视频的推流与拉流
1. RTP、RTCP、RTMP、RTSP、HLS 的区别
1.1 RTP(Real-time Transport Protocol)
- 作用:RTP 是一种实时传输协议,专门用于音视频数据的传输。
- 传输方式:通常基于 UDP,保证低延迟。
- 特点:
- 搭配 RTCP(控制协议)用于质量监测和同步。
- 适用于实时通信,如 VoIP、视频会议、RTSP 直播等。
1.2 RTCP(Real-time Transport Control Protocol)
- 作用:RTCP 是 RTP 的控制协议,主要用于监测传输质量、统计数据和同步音视频。
- 传输方式:与 RTP 一起工作,通常在 RTP 端口号 +1 的端口上传输。
- 特点:
- 发送接收端的统计信息(丢包率、延迟、抖动等)。
- 允许接收端反馈 QoS(服务质量),帮助发送端调整编码或速率。
- 在视频会议中,RTCP 还可用于参与者管理(如报告活跃用户)。
1.3 RTMP(Real-Time Messaging Protocol)
- 作用:RTMP 是 Adobe 开发的协议,广泛用于 Flash 视频流。
- 传输方式:基于 TCP,保持稳定传输。
- 特点:
- 低延迟(通常在 1~3 秒)。
- 适用于直播推流(如 OBS 直播到服务器)。
- 需要服务器支持(如 Nginx-RTMP、Wowza)。
1.4 RTSP(Real-Time Streaming Protocol)
- 作用:RTSP 不是传输协议,而是 流控制协议,用于管理 RTP 传输。
- 传输方式:RTSP 控制流,RTP 负责音视频数据传输。
- 特点:
- 提供播放、暂停、快进等控制功能。
- 主要用于监控、IP Camera 等场景。
1.5 HLS(HTTP Live Streaming)
- 作用:HLS 是苹果开发的流媒体协议,基于 HTTP 进行音视频分片传输。
- 传输方式:HTTP + 分片(TS/M3U8)。
- 特点:
- 兼容性强:适用于 Web、移动端。
- 延迟较高(通常 10~30 秒)。
- 支持 CDN 分发,可用于大规模直播。
协议 | 作用 | 传输方式 | 主要应用 |
---|---|---|---|
RTP | 传输音视频 | UDP | 视频会议、VoIP |
RTCP | RTP 质量控制 | UDP | 统计、同步、QoS 反馈 |
RTMP | 低延迟推流 | TCP | 直播(已被 HLS 取代) |
RTSP | 控制音视频流 | RTP/RTCP | 监控、IP Camera |
HLS | HTTP 流播放 | HTTP | 视频点播、直播 |
2. 为什么 HLS 能替代 RTMP?
RTMP 过去是直播的主流协议,但 HLS 逐渐取代了 RTMP,主要原因有:
- RTMP 依赖 Flash,而 Flash 已被淘汰。
- HLS 兼容性更强,可直接在浏览器、iOS、Android 设备播放。
- HLS 支持 CDN 分发,比 RTMP 更适合大规模直播。
- HLS 采用 HTTP 传输,不易被防火墙拦截。
- HLS 通过 Adaptive Bitrate(ABR)优化观看体验,支持不同网络条件下的自适应码率。
📌 HLS 的唯一缺点是延迟较高(通常 10~30 秒),但低延迟 HLS(LL-HLS)已在优化这个问题。
3. RTSP 作为控制协议的作用
为什么 RTSP URL 以 rtsp://
开头?
- RTSP 主要用于向服务器请求流媒体内容,就像
http://
表示用 HTTP 请求网页一样,rtsp://
表示用 RTSP 请求流媒体。 - RTSP 负责建立、管理和控制流,而不是直接传输数据。
- 音视频流通常由 RTP(Real-time Transport Protocol) 负责,RTSP 只是负责发送播放、暂停、停止等指令。
👉 RTSP 类似于 HTTP,但用于音视频流控制,而 RTP 才是传输音视频数据的协议。
4. RTSP 请求内容示例
RTSP 的交互方式和 HTTP 类似,采用 文本指令 来控制流媒体。
1. RTSP 会话建立
一个完整的 RTSP 会话通常包括:
- OPTIONS:查询服务器支持的功能。
- DESCRIBE:请求媒体描述信息(返回 SDP)。
- SETUP:建立 RTP 传输通道。
- PLAY:开始播放。
- PAUSE(可选):暂停播放。
- TEARDOWN:结束会话。
2. RTSP 请求示例
假设我们要请求 rtsp://192.168.1.100:8554/live.sdp
的视频流:
(1) OPTIONS(查询服务器支持的指令)
OPTIONS rtsp://192.168.1.100:8554/live.sdp RTSP/1.0
CSeq: 1
User-Agent: VLC/3.0.11
📌 作用:客户端请求服务器支持的 RTSP 方法。
(2) DESCRIBE(请求 SDP 媒体描述信息)
DESCRIBE rtsp://192.168.1.100:8554/live.sdp RTSP/1.0
CSeq: 2
Accept: application/sdp
User-Agent: VLC/3.0.11
📌 作用:请求流媒体的详细信息(返回 SDP)。
服务器返回 SDP(Session Description Protocol):
RTSP/1.0 200 OK
CSeq: 2
Content-Type: application/sdp
Content-Length: 250
v=0
o=- 2890844526 2890842807 IN IP4 192.168.1.100
s=Live Stream
m=video 5004 RTP/AVP 96
a=rtpmap:96 H264/90000
m=audio 5006 RTP/AVP 97
a=rtpmap:97 AAC/44100
📌 SDP 说明:
m=video 5004 RTP/AVP 96
:视频流通过 RTP,端口 5004 传输,格式是 H.264。m=audio 5006 RTP/AVP 97
:音频流通过 RTP,端口 5006 传输,格式是 AAC。
👉 RTP 负责音视频数据传输,RTSP 只是告诉客户端怎么获取这些流!
(3) SETUP(建立 RTP 传输通道)
SETUP rtsp://192.168.1.100:8554/live.sdp/trackID=0 RTSP/1.0
CSeq: 3
Transport: RTP/AVP;unicast;client_port=5004-5005
User-Agent: VLC/3.0.11
📌 作用:告诉服务器客户端要用 RTP 端口 5004-5005 接收音视频流。
服务器响应:
RTSP/1.0 200 OK
CSeq: 3
Session: 12345678
Transport: RTP/AVP;unicast;client_port=5004-5005;server_port=6000-6001
📌 说明:
- Session: 12345678:会话 ID,后续请求必须带上。
- 服务器 RTP 端口 6000-6001,客户端接收端口 5004-5005。
(4) PLAY(开始播放)
PLAY rtsp://192.168.1.100:8554/live.sdp RTSP/1.0
CSeq: 4
Session: 12345678
Range: npt=0.000-
User-Agent: VLC/3.0.11
📌 作用:告诉服务器 开始发送 RTP 音视频流。
服务器响应:
RTSP/1.0 200 OK
CSeq: 4
Session: 12345678
RTP-Info: url=rtsp://192.168.1.100:8554/live.sdp;seq=12345;rtptime=67890
📌 此时,服务器就会通过 RTP 端口 5004(视频)、5006(音频)开始发送数据。
(5) TEARDOWN(结束会话)
TEARDOWN rtsp://192.168.1.100:8554/live.sdp RTSP/1.0
CSeq: 5
Session: 12345678
User-Agent: VLC/3.0.11
📌 作用:关闭 RTP 传输,释放资源。
RTSP 负责控制,RTP 负责传输
操作 | RTSP 作用 | RTP 作用 |
---|---|---|
OPTIONS | 查询服务器支持的功能 | - |
DESCRIBE | 获取 SDP(描述音视频流信息) | - |
SETUP | 建立 RTP 传输通道 | - |
PLAY | 请求播放音视频 | 开始传输 RTP 音视频数据 |
PAUSE | 请求暂停 | 停止传输 RTP |
TEARDOWN | 关闭会话 | 停止 RTP 传输 |
- RTSP 就像 HTTP,一种文本协议,用于请求和控制流媒体。
- RTP 才是真正的音视频数据传输协议。
5. RTSP 不能替代 RTCP 的原因
1. RTSP 只负责会话控制,不监控 RTP 传输质量
RTSP 主要用于:
- 建立流媒体会话(OPTIONS、DESCRIBE、SETUP、PLAY、PAUSE、TEARDOWN)。
- 不负责 RTP 传输的质量监控,它只是告诉服务器 “播放” 或 “暂停”,但 不会反馈丢包、延迟等网络状态。
而 RTCP 主要用于:
- 监控 RTP 传输质量,如丢包率、网络抖动、延迟变化等。
- 接收端反馈 QoS 信息,发送端可以根据 RTCP 数据调整比特率、编码方式等,优化流媒体体验。
📌 示例:如果网络出现丢包,RTSP 并不会告诉 RTP 传输链路,而 RTCP 会主动汇报网络状态,帮助优化流媒体传输。
2. RTCP 是 RTP 的一部分,而 RTSP 只是控制协议
RTCP 是 RTP 协议的控制协议,每个 RTP 连接都有一个对应的 RTCP 连接。例如:
- RTP 端口:5004
- RTCP 端口:5005 (通常为 RTP 端口 +1)
RTCP 通过 UDP 传输,而 RTSP 通过 TCP 传输,它们在协议栈中完全不同:
RTSP -> TCP(用于流控制)
RTP -> UDP(用于传输音视频数据)
RTCP -> UDP(用于传输统计信息)
📌 示例:RTSP 只控制“播放”音视频,而 RTCP 监测“播放”时的网络质量,并提供反馈数据。
3. RTCP 提供音视频同步功能,而 RTSP 不能
- RTCP 通过
Sender Report(SR)
和Receiver Report(RR)
实现音视频同步,确保视频和音频不会出现时间错位问题。 - RTSP 仅仅是一个控制流协议,并不能提供这种时间同步功能。
📌 示例:如果音频比视频快 100ms,RTCP 反馈时间戳信息,播放端可进行同步调整,而 RTSP 不能。
📌 结论:RTSP 负责控制播放,而 RTCP 负责优化 RTP 传输质量,两者不能互相替代! 🚀
6. live555 推流与拉流实现
1 live555 推流协议
- RTSP 负责建立连接和控制流。
- RTP/RTCP 负责传输音视频数据。
推流流程:
- RTSP ANNOUNCE:声明流媒体信息。
- RTSP SETUP:建立 RTP 传输。
- RTSP RECORD:开始推流。
- RTP 传输音视频。
示例(FFmpeg 推流到 live555):
ffmpeg -re -i input.mp4 -c:v libx264 -f rtsp rtsp://localhost:8554/test
2 live555 拉流协议
- RTSP 负责流控制(OPTIONS、DESCRIBE、SETUP、PLAY)。
- RTP 传输音视频数据。
拉流流程:
- RTSP DESCRIBE:请求 SDP。
- RTSP SETUP:建立 RTP 传输。
- RTSP PLAY:开始播放,RTP 传输音视频。
示例(FFmpeg 拉流):
ffmpeg -rtsp_transport tcp -i rtsp://localhost:8554/test -c copy output.mp4
📌 live555 推流和拉流都基于 RTSP 控制,而 RTP 负责真正的音视频数据传输。
7. 总结
- RTP 负责传输音视频数据,RTCP 负责质量控制,RTSP 负责流控制,RTMP 过去用于直播但已被 HLS 取代。
- HLS 兼容性强,适合大规模直播,虽然延迟较高,但 LL-HLS 正在优化。
- live555 主要通过 RTSP 控制流,RTP 进行音视频数据传输。
🚀 理解这些协议,有助于选择合适的流媒体技术,优化音视频传输体验!