使用Nginx-RTMP模块配合HLS协议直播展示windows的vps服务器上的实时画面
方案:FFmpeg + Nginx-RTMP + HLS
1. 安装Nginx和Nginx-RTMP模块
在Windows VPS上安装Nginx并集成RTMP模块(Windows默认没有官方预编译版本,需要自己编译或使用第三方构建)。
-
简便方法:使用预编译版本
- 下载带有RTMP模块的Nginx Windows版本,例如从https://github.com/illuspas/nginx-rtmp-win32 或其他可信来源获取。
- 解压到VPS的某个目录(例如C:\nginx)。
-
手动编译(可选)
- 如果需要最新版本,可以从Nginx官网(https://nginx.org/)下载源码,并从https://github.com/arut/nginx-rtmp-module 下载RTMP模块源码,使用MinGW或MSYS2在Windows上编译。
2. 配置Nginx
编辑Nginx配置文件(通常在C:\nginx\conf\nginx.conf),添加RTMP和HLS支持。示例配置如下:
worker_processes 1;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935; # RTMP监听端口
chunk_size 4096;
application live {
live on;
record off;
# 启用HLS
hls on;
hls_path C:/nginx/hls; # HLS分片文件存储路径,确保目录存在
hls_fragment 5s; # 每个HLS分片时长
hls_playlist_length 20s; # 播放列表总时长
}
}
}
http {
server {
listen 80; # HTTP监听端口
location /hls {
root C:/nginx; # HLS文件路径
add_header Access-Control-Allow-Origin *; # 允许跨域访问
}
}
}
- 保存配置文件后,在命令行进入C:\nginx目录,运行nginx.exe启动服务。
- 检查是否正常运行:nginx -t(测试配置)。
3. 使用FFmpeg推流
用FFmpeg捕获VPS屏幕并推送RTMP流到Nginx。示例命令:
- rtmp://127.0.0.1:1935/live/stream:推流地址,live是应用名,stream是流名(可自定义)。
- 运行此命令后,FFmpeg会将屏幕画面推送到Nginx的RTMP服务器。
4. 创建网页播放器
在网页端使用HLS协议播放流。以下是简单的HTML代码:
<!DOCTYPE html>
<html>
<head>
<title>实时画面直播</title>
</head>
<body>
<video id="video" controls autoplay muted width="800"></video>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
<script>
const video = document.getElementById('video');
if (Hls.isSupported()) {
const hls = new Hls();
hls.loadSource('http://your-vps-ip/hls/stream.m3u8'); // 替换为VPS公网IP
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, () => {
video.play();
});
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
video.src = 'http://your-vps-ip/hls/stream.m3u8'; // 原生支持HLS
video.addEventListener('loadedmetadata', () => {
video.play();
});
}
</script>
</body>
</html>
- 将your-vps-ip替换为VPS的公网IP。
- 将此HTML文件托管在任意Web服务器上(可以用Nginx的HTTP模块直接托管,或用其他工具如Python的http.server)。
5. 优化与部署
-
启动自动化:
- 将FFmpeg命令加入Windows启动脚本(可以用.bat文件和任务计划程序)。
- 确保Nginx开机自启(可以用Windows服务包装工具如NSSM)。
-
防火墙设置:
- 开放端口1935(RTMP)和80(HTTP)。
-
存储管理:
- HLS分片文件会占用磁盘空间,可以定期清理C:/nginx/hls目录(例如写个脚本删除旧文件)。
-
多人观看:
- Nginx-RTMP会自动处理多客户端请求,HLS协议支持大规模分发。如果观众较多,可考虑搭配CDN加速。
优点
- 多人支持:HLS协议天然适合多用户观看,Nginx高效分发。
- 稳定:Nginx-RTMP经过广泛验证,适合长时间运行。
- 低延迟:配合-tune zerolatency,延迟可控制在数秒内。
- 跨平台:HLS在浏览器和移动端兼容性极佳。
注意事项
- 性能:如果VPS性能有限,可降低帧率(例如10帧)或分辨率(加-s 1280x720)。
- 带宽:多人观看会增加带宽需求,确保VPS网络支持。
- 安全性:如需限制访问,可在Nginx中添加IP白名单或认证。