RTMP、HLS、SRT、HTTP-FLV、WebRTC、DASH —— 一篇搞懂 IPTV 主流传输协议的差异、应用场景与服务器选型。
| 协议 | 底层 | 延迟 | 典型用途 | 兼容性 |
|---|---|---|---|---|
| RTMP | TCP 1935 | 1~3s | 推流(OBS→服务器) | 老旧但通用 |
| HLS | HTTP 80/443 | 5~20s | 直播分发到 Web/手机 | 最广泛 |
| HTTP-FLV | HTTP | 1~3s | B 站式低延迟 Web 直播 | 中(需 flv.js) |
| SRT | UDP | 0.5~2s | 跨公网高质量推流 | 新,越来越好 |
| WebRTC | UDP/SRTP | <0.5s | 连麦、超低延迟 | 浏览器原生 |
| DASH | HTTP | 5~20s | 点播 / 国际 CDN | 好 |
HLS 由 Apple 提出,将媒体流切片为若干小 .ts 文件,通过 .m3u8 索引播放。由于基于 HTTP,可被任意 CDN 缓存,是目前 IPTV 直播分发的首选协议。
一份最小化的 playlist.m3u8:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:6.0,
seg0.ts
#EXTINF:6.0,
seg1.ts
#EXTINF:6.0,
seg2.ts
#EXT-X-ENDLIST
RTMP 基于 TCP 长连接,端口 1935,是 OBS、FFmpeg 默认的推流方式。服务器端常用 Nginx-RTMP 模块或 SRS。
Nginx-RTMP 最小配置:
worker_processes auto;
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
# 转 HLS
hls on;
hls_path /var/www/hls;
hls_fragment 6s;
hls_playlist_length 30s;
}
}
}
SRT(Secure Reliable Transport)基于 UDP,自带 ARQ 重传与加密,特别适合跨城 / 跨国推流,已被 SRS、VLC、OBS 全面支持。
# SRS 开启 SRT 监听
srt_server {
enabled on;
listen 10080;
maxbw 10000000;
connect_timeout 4000;
peer_idle_timeout 8000;
}
推流示例:
ffmpeg -re -i input.mp4 -c copy \
-f mpegts 'srt://your.server:10080?streamid=#!::r=live/stream,m=publish'
将 FLV 封装通过 HTTP 流式下发,浏览器用 flv.js 直接播放,延迟可达 1~3 秒,相比 HLS 体验更佳,国内直播平台广泛使用。
<video id="v" controls></video>
<script src="https://cdn.jsdelivr.net/npm/flv.js@latest/dist/flv.min.js"></script>
<script>
if (flvjs.isSupported()) {
const player = flvjs.createPlayer({
type: 'flv',
isLive: true,
url: 'https://example.com/live/test.flv'
});
player.attachMediaElement(document.getElementById('v'));
player.load();
player.play();
}
</script>
支持 RTMP/HLS/HTTP-FLV/WebRTC/SRT,单机万级并发,是国内最流行的直播服务器。
经典老牌方案,配置简单,适合中小规模直播与转 HLS,但已不再活跃。
极简二进制,支持 RTSP/RTMP/HLS/WebRTC/SRT 一站式转发,开箱即用。
企业级流媒体服务器,支持 DRM、录制、转码、多端分发。
主打超低延迟(WebRTC 端到端 <0.5s),适合连麦与监控。
高性能国产流媒体服务器,协议覆盖全,性能极佳,社区活跃。
hls_fragment 与 playlist_lengthadd_header Access-Control-Allow-Origin *;latency 参数(一般 ≥ 120ms)