流媒体技术在音视频传输中起着关键作用,其中 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视频会议、VoIPRTCPRTP 质量控制UDP统计、同步、QoS 反馈RTMP低延迟推流TCP直播(已被 HLS 取代)RTSP控制音视频流RTP/RTCP监控、IP CameraHLSHTTP 流播放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请求暂停停止传输 RTPTEARDOWN关闭会话停止 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 端口:5004RTCP 端口: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 进行音视频数据传输。
🚀 理解这些协议,有助于选择合适的流媒体技术,优化音视频传输体验!