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

深入理解 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
RTCPRTP 质量控制UDP统计、同步、QoS 反馈
RTMP低延迟推流TCP直播(已被 HLS 取代)
RTSP控制音视频流RTP/RTCP监控、IP Camera
HLSHTTP 流播放HTTP视频点播、直播

2. 为什么 HLS 能替代 RTMP?

RTMP 过去是直播的主流协议,但 HLS 逐渐取代了 RTMP,主要原因有:

  1. RTMP 依赖 Flash,而 Flash 已被淘汰。
  2. HLS 兼容性更强,可直接在浏览器、iOS、Android 设备播放。
  3. HLS 支持 CDN 分发,比 RTMP 更适合大规模直播。
  4. HLS 采用 HTTP 传输,不易被防火墙拦截
  5. 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 会话通常包括:

  1. OPTIONS:查询服务器支持的功能。
  2. DESCRIBE:请求媒体描述信息(返回 SDP)。
  3. SETUP:建立 RTP 传输通道。
  4. PLAY:开始播放。
  5. PAUSE(可选):暂停播放。
  6. 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 负责传输音视频数据

推流流程:

  1. RTSP ANNOUNCE:声明流媒体信息。
  2. RTSP SETUP:建立 RTP 传输。
  3. RTSP RECORD:开始推流。
  4. 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 传输音视频数据

拉流流程:

  1. RTSP DESCRIBE:请求 SDP。
  2. RTSP SETUP:建立 RTP 传输。
  3. 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 进行音视频数据传输。

🚀 理解这些协议,有助于选择合适的流媒体技术,优化音视频传输体验!


http://www.kler.cn/a/584652.html

相关文章:

  • 【经验分享】SpringBoot集成Websocket开发 之 使用由 Jakarta EE 规范提供的 API开发
  • docker基本应用和相关指令
  • MySQL小练习
  • 大数据面试之路 (三) mysql
  • 在Vue中如何高效管理组件状态?
  • 蓝桥每日打卡--数组美丽值求和
  • LM Studio 替换源的方式解决huggingface.co无法访问的问题
  • Java 无 GUI 浏览器:HtmlUnit 入门及实战 [特殊字符]
  • 地理信息系统(ArcGIS)在水文水资源、水环境中的应用
  • ClickHouse 通过 ​*ARRAY JOIN* 结合 ​Map 类型的内置函数取数值
  • ollama docker离线安装本地大模型
  • 如何解决Redis的缓存雪崩、缓存击穿、缓存穿透?
  • Flink状态管理深度探索:从Keyed State到分布式快照
  • 在 Windows 系统下使用 VMware 安装 Ubuntu 24.04 LTS 系统
  • unittest vs pytest区别
  • 分布式存储学习——HBase表结构设计
  • ESP32芯片模组方案,设备物联网无线通信,WiFi蓝牙交互控制应用
  • 25年3月重磅--聊聊OpenManus
  • Go语言 vs Java语言:核心差异与适用场景解析
  • 文档在线协同工具ONLYOFFICE教程:如何使用宏对 PDF 表单中的特定字段执行计算