CGJU
查工具网
2026年6月25日 · 阅读时长 7 分钟
💡 快速选择:通用直播选 RTMP,低延迟高质量选 SRT,浏览器实时互动选 WebRTC。

一、三大直播协议概述

1. RTMP 协议

RTMP(Real-Time Messaging Protocol)是由 Macromedia(后被 Adobe 收购)开发的实时消息传输协议,最初用于 Flash 播放器与服务器之间的音视频传输。

  • 发布时间:2002 年
  • 开发者:Adobe / Macromedia
  • 传输层:TCP
  • 默认端口:1935

虽然 Flash 已经退出历史舞台,但 RTMP 仍然是直播推流端最常用的协议,几乎所有直播平台(如抖音、B站、Twitch)都支持 RTMP 推流。

2. SRT 协议

SRT(Secure Reliable Transport)是由 Haivision 开发的开源视频传输协议,基于 UDP 传输,同时提供了类似 TCP 的可靠性。

  • 发布时间:2017 年(开源)
  • 开发者:Haivision
  • 传输层:UDP
  • 默认端口:自定义(常用 9000)

SRT 的核心优势是在不稳定的网络环境下仍能保持低延迟和高质量传输,适合远程制作、户外直播等场景。

3. WebRTC 协议

WebRTC(Web Real-Time Communication)是网页实时通信技术,支持浏览器之间直接进行音视频通信,无需安装任何插件。

  • 发布时间:2011 年
  • 开发者:Google,后成为 W3C 标准
  • 传输层:UDP
  • 默认端口:随机(常用 3478/19302)

WebRTC 的最大优势是延迟极低(通常小于 500ms),且浏览器原生支持,非常适合实时互动直播、视频会议等场景。

二、延迟对比

延迟是直播协议最重要的指标之一,不同的应用场景对延迟的要求不同。

协议 典型延迟 延迟级别
RTMP 1-3 秒 低延迟
SRT 0.5-2 秒 很低延迟
WebRTC 100-500 ms 超低延迟
⚠️ 注意:以上是推流端到服务器的延迟。如果经过 HLS/DASH 等协议分发到观众端,总延迟会增加到 10-30 秒。要实现端到端低延迟,需要全链路使用低延迟协议。

三、兼容性对比

推流端兼容性

  • RTMP:几乎所有推流软件(OBS、FFmpeg、Wirecast 等)和直播平台都支持,兼容性最好
  • SRT:OBS 25.0+、FFmpeg 4.0+、Haivision 设备等支持,支持度在快速提升
  • WebRTC:浏览器原生支持,OBS 等桌面软件支持较少,需要专门的 SDK

播放端兼容性

  • RTMP:浏览器需要 Flash(已废弃)或使用 flv.js 等库通过 HTTP-FLV 播放,原生支持差
  • SRT:浏览器不支持,需要专门的播放器或设备
  • WebRTC:所有主流浏览器(Chrome、Firefox、Safari、Edge)原生支持

CDN 支持

  • RTMP:所有 CDN 厂商都支持,是直播 CDN 的标准协议
  • SRT:部分 CDN 支持(如 Cloudflare Stream、Akamai),支持度在增长
  • WebRTC:支持 WebRTC 分发的 CDN 较少,成本较高

四、网络适应性对比

直播推流经常面临网络不稳定的情况,协议的网络适应性非常重要。

特性 RTMP SRT WebRTC
传输协议 TCP UDP + ARQ UDP
丢包重传 ✓ TCP重传 ✓ 选择性重传 △ 部分支持
丢包影响 大(卡顿累积) 小(画质下降)
带宽波动 很好(自适应)
加密 △ RTMPS ✓ AES-128/256 ✓ DTLS-SRTP

五、OBS 设置教程

OBS Studio 是最流行的直播推流软件,下面介绍如何配置不同协议的推流。

1. RTMP 推流设置

  1. 打开 OBS,点击「文件」→「设置」→「推流」
  2. 服务选择「自定义...」
  3. 服务器填写:rtmp://你的服务器地址/live
  4. 串流密钥填写:你的直播间密钥
  5. 点击「确定」保存设置
  6. 点击「开始推流」即可开始直播

2. SRT 推流设置

  1. 打开 OBS,点击「文件」→「设置」→「推流」
  2. 服务选择「自定义...」
  3. 服务器填写:srt://你的服务器地址:9000?streamid=你的流名
  4. 串流密钥留空
  5. 点击「确定」保存设置
  6. 点击「开始推流」即可开始直播

3. 推荐的视频编码设置

  • 编码器:x264(兼容性好)或 NVENC(硬件加速,CPU占用低)
  • 分辨率:1920×1080(1080p)或 1280×720(720p)
  • 帧率:30fps 或 60fps
  • 码率:3000-6000 kbps(根据上传带宽调整)
  • 关键帧间隔:2 秒(60 帧 @ 30fps)
  • 预设:veryfast 或 faster(平衡速度和质量)

六、Nginx-RTMP 服务器搭建

Nginx-RTMP 是最常用的自建直播服务器方案,下面介绍快速搭建方法。

1. Ubuntu/Debian 安装

# 安装依赖
sudo apt update
sudo apt install -y build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev

# 下载 nginx 和 nginx-rtmp-module
wget http://nginx.org/download/nginx-1.24.0.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/refs/heads/master.zip -O nginx-rtmp-module.zip

# 解压
tar zxf nginx-1.24.0.tar.gz
unzip nginx-rtmp-module.zip

# 编译安装
cd nginx-1.24.0
./configure --add-module=../nginx-rtmp-module-master
make
sudo make install

2. 配置 Nginx-RTMP

编辑 /usr/local/nginx/conf/nginx.conf,在 http 块之前添加 rtmp 配置:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            record off;
            
            # HLS 配置
            hls on;
            hls_path /tmp/hls;
            hls_fragment 3s;
            hls_playlist_length 10s;
        }
    }
}

然后在 http 块中添加 HLS 访问配置:

location /hls {
    types {
        application/vnd.apple.mpegurl m3u8;
        video/mp2t ts;
    }
    root /tmp;
    add_header Cache-Control no-cache;
    add_header Access-Control-Allow-Origin *;
}

3. 启动服务

# 启动 nginx
sudo /usr/local/nginx/sbin/nginx

# 重新加载配置
sudo /usr/local/nginx/sbin/nginx -s reload

# 停止
sudo /usr/local/nginx/sbin/nginx -s stop

4. 测试推流

使用 FFmpeg 推流测试:

ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost/live/stream1

然后就可以通过以下地址观看:

  • RTMP 地址:rtmp://你的服务器IP/live/stream1
  • HLS 地址:http://你的服务器IP/hls/stream1.m3u8

七、FFmpeg 推流命令

1. RTMP 推流

本地文件推流(实时速率):

ffmpeg -re -i input.mp4 -c:v libx264 -b:v 2500k -g 60 \
  -c:a aac -b:a 128k -f flv rtmp://server/live/stream

-re 参数表示以本机帧速率读取输入,模拟实时直播。

2. 摄像头/麦克风实时推流

# Linux
ffmpeg -f v4l2 -i /dev/video0 -f alsa -i default \
  -c:v libx264 -b:v 2000k -g 60 \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream

# Windows
ffmpeg -f dshow -i video="摄像头名称":audio="麦克风名称" \
  -c:v libx264 -b:v 2000k -g 60 \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream

3. SRT 推流

# 推流端
ffmpeg -re -i input.mp4 -c:v libx264 -b:v 2500k -g 30 \
  -c:a aac -b:a 128k -f mpegts srt://0.0.0.0:9000?mode=listener

# 播放端(或拉流转推)
ffplay srt://发送端IP:9000?mode=caller

4. 屏幕录制推流

# X11 (Linux)
ffmpeg -f x11grab -s 1920x1080 -r 30 -i :0.0 \
  -c:v libx264 -b:v 3000k -g 60 \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream

# gdigrab (Windows)
ffmpeg -f gdigrab -s 1920x1080 -r 30 -i desktop \
  -c:v libx264 -b:v 3000k -g 60 \
  -c:a aac -b:a 128k \
  -f flv rtmp://server/live/stream

八、直播最佳实践

1. 推流参数推荐

画质等级 分辨率 帧率 视频码率 音频码率
标清 854×480 30 800-1500k 96-128k
高清 1280×720 30 1500-3000k 128k
全高清 1920×1080 30 3000-6000k 128-192k
全高清高帧率 1920×1080 60 4500-8000k 128-192k

2. 网络保障建议

  • 使用有线网络:WiFi 不稳定,重要直播建议使用网线直连
  • 预留带宽:上传速度至少是推流码率的 1.5-2 倍
  • 测试网络:直播前使用 speedtest.net 测试上传速度
  • 备用方案:准备 4G/5G 备份网络,防止主网络故障

3. 推流安全

  • 使用推流密钥:不要泄露你的推流地址和密钥
  • 开启鉴权:服务器配置推流鉴权,防止盗推
  • 使用 RTMPS:支持的平台使用 RTMPS(RTMP over TLS)加密推流

总结

选择直播协议需要根据具体场景来决定:

  • RTMP:生态最成熟,兼容性最好,适合大多数直播场景
  • SRT:抗网络抖动能力强,适合户外直播、远程制作
  • WebRTC:延迟最低,浏览器原生支持,适合实时互动直播

对于大多数用户来说,使用 RTMP 推流 + HLS/HTTP-FLV 分发是最稳妥的方案。如果需要低延迟互动,可以考虑 WebRTC。

想要测试你的直播流是否正常?可以使用我们的 FLV/RTMP 在线播放器快速验证直播流的可用性。

相关推荐

更多精彩文章和实用工具

想测试你的直播流?

使用我们的FLV/RTMP在线播放器,快速验证直播流是否正常

立即体验 ➡