rtsp rtmp 跟 http 区别
一 会话管理 与SDP
1. RTSP(Real Time Streaming Protocol)
(1) 是否需要建立会话?
- 需要显式会话。
RTSP 是基于会话的协议,客户端与服务端通过SETUP
、PLAY
、TEARDOWN
等命令明确控制会话生命周期。- 会话标识:通过
Session
头字段维护会话状态(如Session: 12345678
)。
- 会话标识:通过
(2) 是否需要 SDP?
- 需要 SDP。
RTSP 使用 SDP(Session Description Protocol)在DESCRIBE
响应中描述媒体流的详细信息:m=video 0 RTP/AVP 96 a=rtpmap:96 H264/90000 a=control:track1
- 作用:定义媒体类型(视频/音频)、编码格式、传输协议(RTP)、控制路径等。
2. RTMP(Real-Time Messaging Protocol)
(1) 是否需要建立会话?
- 通过隐式连接管理会话。
RTMP 不显式声明会话,但通过以下机制维护逻辑会话:- NetConnection:客户端与服务端建立持久 TCP 连接(类似会话)。
- NetStream:在连接内创建多个流通道(如
stream ID=1
),每个流独立传输数据。
(2) 是否需要 SDP?
- 不需要 SDP。
RTMP 通过以下方式传递媒体参数:- 元数据(onMetaData):客户端在发布流时发送元数据(分辨率、编码格式等)。
> onMetaData: { width: 1280, height: 720, videocodecid: 7 (H.264) }
- 编码协商:客户端在
connect
命令中声明支持的编解码能力(如videoCodecs: 128
)。
- 元数据(onMetaData):客户端在发布流时发送元数据(分辨率、编码格式等)。
3. HTTP流媒体(如HLS、DASH)
(1) 是否需要建立会话?
- 无显式会话。
HTTP流媒体基于无状态的HTTP协议,通过请求-响应模式获取媒体分片:- HLS:客户端通过HTTP GET请求获取
.m3u8
索引文件和.ts
分片。 - DASH:客户端获取
.mpd
清单文件并请求.m4s
分片。
- HLS:客户端通过HTTP GET请求获取
(2) 是否需要 SDP?
- 不需要 SDP。
媒体参数通过以下方式描述:- 清单文件:如HLS的
.m3u8
或DASH的.mpd
,包含码率、分辨率、分片URL等信息。#EXT-X-STREAM-INF:BANDWIDTH=800000,RESOLUTION=640x360 stream_360p.ts
- 清单文件:如HLS的
对比总结
协议 | 会话管理 | 媒体描述方式 | 典型场景 |
---|---|---|---|
RTSP | 显式会话(SETUP /PLAY ) | SDP(DESCRIBE 响应) | 视频监控、IPTV |
RTMP | 隐式会话(NetConnection) | 元数据(onMetaData ) | 直播推流、低延迟交互 |
HTTP流媒体 | 无会话(无状态HTTP) | 清单文件(m3u8/mpd) | 自适应流(HLS/DASH) |
关键区别解释
1. 会话管理
- RTSP:需要显式控制会话状态(如播放、暂停),适合需要精细控制的场景。
- RTMP:通过长连接维护隐式会话,适合持续流传输(如直播)。
- HTTP流媒体:无会话,每次请求独立,适合CDN分发和自适应码率。
2. 媒体参数传递
- RTSP:依赖SDP标准化描述,确保跨平台兼容性。
- RTMP:通过私有元数据和命令协商参数,灵活性高但标准化较弱。
- HTTP流媒体:通过清单文件静态描述,支持动态切换码率。
适用场景建议
- 低延迟控制:RTMP(1-3秒)或 RTSP(配合RTP)。
- 高兼容性分发:HTTP(HLS/DASH)。
- 设备控制:RTSP(如摄像头PTZ控制)。
通过理解这些协议的设计差异,可以更好地选择适合业务需求的流媒体方案。