1. RTMP 基础概念
-
核心角色:
- 推流端(Publisher):将音视频数据推送到服务器的设备(如OBS、手机APP)。
- 服务器(RTMP Server):接收推流并分发给观众的中间节点(如Nginx-RTMP、SRS)。
- 播放端(Player):从服务器拉取流并播放的设备(如VLC、网页播放器)。
-
协议特点:
- 基于TCP:保证数据完整性,但延迟较高(3-5秒)。
- 默认端口:1935(推流和拉流均通过此端口)。
- 2. 快速搭建 RTMP 服务器
-
以 Nginx-RTMP 为例(支持Linux/Windows):
步骤1:安装 Nginx-RTMP
步骤2:配置 RTMP 服务
编辑配置文件
/etc/nginx/nginx.conf
,添加以下内容: -
rtmp {server {listen 1935;chunk_size 4096;application live {live on;record off;# 允许所有IP推流(生产环境需限制)allow publish all;}} }
步骤3:重启 Nginx
-
sudo systemctl restart nginx
3. 推流与拉流操作
推流端(以 OBS 为例)
-
下载 OBS:https://obsproject.com/
-
配置推流地址:
- 服务器:
rtmp://你的服务器IP:1935/live
- 流密钥:自定义唯一标识(如
test
) - 完整推流URL:
rtmp://你的服务器IP:1935/live/test
- 服务器:
-
开始推流:点击“开始推流”。
拉流播放(以 VLC 为例)
- 打开 VLC → 媒体 → 打开网络串流 → 输入地址:
rtmp://你的服务器IP:1935/live/test
- 点击“播放”。
4. 进阶功能
转码与多协议分发
在 nginx.conf
中添加转码配置:
application live {live on;exec ffmpeg -i rtmp://localhost:1935/live/$name-c:v libx264 -preset ultrafast -tune zerolatency -g 20 -r 30 -b:v 1000k -f flv rtmp://localhost:1935/hls/$name;
}application hls {live on;hls on;hls_path /tmp/hls;hls_fragment 2s;hls_playlist_length 6s;
}
通过HLS协议播放:http://你的服务器IP:8080/hls/test.m3u8
录制直播流
application live {live on;record all;record_path /var/rec;record_unique on;
}
5. 常见问题与解决
问题1:推流失败
问题3:浏览器无法播放RTMP
- 原因:服务器防火墙未开放1935端口。
- 解决:
sudo ufw allow 1935/tcp sudo systemctl restart nginx
问题2:播放卡顿
- 原因:网络带宽不足或服务器性能瓶颈。
- 解决:
- 降低推流码率(OBS设置 → 输出 → 视频比特率)。
- 使用CDN分发或升级服务器配置。
- 原因:现代浏览器已废弃Flash,需转用HLS/WebRTC。
- 解决:
- 使用基于HLS的播放器(如Video.js、hls.js)。
- 将RTMP流转码为HLS/DASH(参考进阶功能)。
6. RTMP 的替代方案
- SRT(Secure Reliable Transport):低延迟、抗丢包,适合不稳定网络。
- WebRTC:超低延迟(<1秒),适合实时互动场景。
- HLS/DASH:基于HTTP的流媒体,兼容所有浏览器和设备。
-
总结
- 适用场景:传统直播推流、视频监控、简单直播系统。