使用Nginx-RTMP模块配合HLS协议直播展示windows的vps服务器上的实时画面

方案:FFmpeg + Nginx-RTMP + HLS

1. 安装Nginx和Nginx-RTMP模块

在Windows VPS上安装Nginx并集成RTMP模块(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。示例命令:


ffmpeg -f gdigrab -framerate 15 -i desktop -c:v libx264 -preset ultrafast -tune zerolatency -f flv rtmp://127.0.0.1:1935/live/stream


  • 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白名单或认证。