文章目录
- 一、总览表(推流/拉流支持情况)
- 二、分协议详细说明
- 1. RTMP(TCP,Flash直播协议)
- 推流(Publish)
- 拉流(Play)
- 2. RTSP(实时流协议,安防为主)
- 模式1:拉流(最常见,摄像头场景)
- 模式2:推流(ANNOUNCE方式,终端上传)
- 3. RTP(纯媒体封装,**不能单独推拉**)
- 三、关键区分(开发常用)
- 四、补充误区
基础不牢,地动山摇
为了我们将来更好的学习流媒体的开发,我们今天继续打基础,相信很多小伙伴都会被标题上说的那几个概念搞混,因此这个基础知识对我们后续的开发和选型有了至关重要的作用.
一、总览表(推流/拉流支持情况)
| 协议 | 是否支持推流(客户端→服务端) | 是否支持拉流(服务端→客户端) | 底层传输 | 典型用途 |
|---|---|---|---|---|
| RTMP | ✅ 推流 ✅ 拉流 | ✅ 推流 ✅ 拉流 | TCP | 直播平台、SRS/Nginx-RTMP,互联网直播 |
| RTP | ❌ 无独立推拉概念(仅媒体载荷封装) | ❌ 无独立推拉概念 | UDP | 底层音视频裸包载体,不单独使用 |
| RTSP | ✅ 推流 ✅ 拉流 | ✅ 推流 ✅ 拉流 | TCP/UDP | 摄像头、GB28181、安防设备 |
这么说吧RTMP,RTSP是一伙的,包含了通信协议的定义,比如握手之类的。而rtp是流的内容,更应该归类到上一讲中的NALU,avcc这类中。
二、分协议详细说明
1. RTMP(TCP,Flash直播协议)
推流(Publish)
客户端(ffmpeg/OBS/车载终端)发送流到流媒体服务:
# ffmpeg推RTMPffmpeg-re-itest.h264-ccopy-fflv rtmp://127.0.0.1/live/stream拉流(Play)
播放器从服务端拉取播放:
ffmpeg-irtmp://127.0.0.1/live/stream-fmp4 out.mp4特点:
- 全双工TCP,弱网友好;
- 互联网直播最常用推拉一体协议。
2. RTSP(实时流协议,安防为主)
RTSP是控制信令协议,媒体数据走RTP;同时支持推拉两种模式:
模式1:拉流(最常见,摄像头场景)
IPC摄像头作为服务端,播放器拉取画面:
ffmpeg-rtsp_transporttcp-irtsp://ip:554/stream-ccopy output.mp4模式2:推流(ANNOUNCE方式,终端上传)
车载/编码器主动向RTSP服务推送视频:
ffmpeg-re-itest.h264-ccopy-rtsp_transporttcp-frtsp rtsp://server:554/live行业场景:GB28181设备、安防平台接收终端RTSP推流。
3. RTP(纯媒体封装,不能单独推拉)
重点:RTP不是完整应用层协议,只是包裹音视频NALU的数据包格式。
- 本身没有握手、播放、发布信令,无法独立建立推拉会话;
- 必须依附上层协议使用:
- RTSP + RTP:安防摄像头;
- JT1078私有RTP:车载视频;
- WebRTC + RTP:网页通话;
- 你只能发送/接收UDP RTP数据包,但没有“推流/拉流会话”概念;
- ffmpeg可以直接读写RTP UDP包,但仅作为裸媒体通道,无鉴权、无播放控制。
三、关键区分(开发常用)
- 需要完整直播服务(手机/网页观看)
选 RTMP:推拉成熟,SRS、Nginx-RTMP原生支持。 - 对接摄像头、国标安防设备
选 RTSP:摄像头默认输出RTSP(媒体承载RTP)。 - 底层裸视频UDP传输(JT1078、内网低延迟转发)
使用RTP包,但必须自己实现上层业务逻辑;不能单独当作推拉协议。
四、补充误区
- 不要混淆 RTP 和 RTSP:
RTSP=控制信令;RTP=音视频数据包;二者配套使用。 - RTMP内部封装FLV,不使用RTP,自成一套封装体系。
- 三者延迟对比:
RTP(UDP) < RTSP < RTMP(TCP)。