H.264 vs H.265 vs AV1:视频编码器深度比较
三大主流视频编码器的压缩效率、编码速度、浏览器支持、专利授权全面对比,帮你选择最适合的编码方案。
阅读更多 →三大直播协议深度对比,从零开始搭建你的直播系统
RTMP(Real-Time Messaging Protocol)是由 Macromedia(后被 Adobe 收购)开发的实时消息传输协议,最初用于 Flash 播放器与服务器之间的音视频传输。
虽然 Flash 已经退出历史舞台,但 RTMP 仍然是直播推流端最常用的协议,几乎所有直播平台(如抖音、B站、Twitch)都支持 RTMP 推流。
SRT(Secure Reliable Transport)是由 Haivision 开发的开源视频传输协议,基于 UDP 传输,同时提供了类似 TCP 的可靠性。
SRT 的核心优势是在不稳定的网络环境下仍能保持低延迟和高质量传输,适合远程制作、户外直播等场景。
WebRTC(Web Real-Time Communication)是网页实时通信技术,支持浏览器之间直接进行音视频通信,无需安装任何插件。
WebRTC 的最大优势是延迟极低(通常小于 500ms),且浏览器原生支持,非常适合实时互动直播、视频会议等场景。
延迟是直播协议最重要的指标之一,不同的应用场景对延迟的要求不同。
| 协议 | 典型延迟 | 延迟级别 |
|---|---|---|
| RTMP | 1-3 秒 | 低延迟 |
| SRT | 0.5-2 秒 | 很低延迟 |
| WebRTC | 100-500 ms | 超低延迟 |
直播推流经常面临网络不稳定的情况,协议的网络适应性非常重要。
| 特性 | RTMP | SRT | WebRTC |
|---|---|---|---|
| 传输协议 | TCP | UDP + ARQ | UDP |
| 丢包重传 | ✓ TCP重传 | ✓ 选择性重传 | △ 部分支持 |
| 丢包影响 | 大(卡顿累积) | 小 | 小(画质下降) |
| 带宽波动 | 差 | 好 | 很好(自适应) |
| 加密 | △ RTMPS | ✓ AES-128/256 | ✓ DTLS-SRTP |
OBS Studio 是最流行的直播推流软件,下面介绍如何配置不同协议的推流。
rtmp://你的服务器地址/livesrt://你的服务器地址:9000?streamid=你的流名Nginx-RTMP 是最常用的自建直播服务器方案,下面介绍快速搭建方法。
# 安装依赖
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
编辑 /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 *;
}
# 启动 nginx
sudo /usr/local/nginx/sbin/nginx
# 重新加载配置
sudo /usr/local/nginx/sbin/nginx -s reload
# 停止
sudo /usr/local/nginx/sbin/nginx -s stop
使用 FFmpeg 推流测试:
ffmpeg -re -i input.mp4 -c copy -f flv rtmp://localhost/live/stream1
然后就可以通过以下地址观看:
rtmp://你的服务器IP/live/stream1http://你的服务器IP/hls/stream1.m3u8本地文件推流(实时速率):
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 参数表示以本机帧速率读取输入,模拟实时直播。
# 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
# 推流端
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
# 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
| 画质等级 | 分辨率 | 帧率 | 视频码率 | 音频码率 |
|---|---|---|---|---|
| 标清 | 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 |
选择直播协议需要根据具体场景来决定:
对于大多数用户来说,使用 RTMP 推流 + HLS/HTTP-FLV 分发是最稳妥的方案。如果需要低延迟互动,可以考虑 WebRTC。
想要测试你的直播流是否正常?可以使用我们的 FLV/RTMP 在线播放器快速验证直播流的可用性。