提示

返回博客列表

想搭个直播?用 nginx-rtmp-module 推流拉流

想搭个直播?用 nginx-rtmp-module 推流拉流

点播(把文件放服务器上让人看)和直播(实时推流)是两码事。如果你有自己的内容想实时播——比如讲课、活动、游戏——最省钱的方案之一就是 nginx + rtmp-module:一台普通服务器就能当推流端和分发端。这篇文章走一遍最小可用配置。

为什么是 nginx-rtmp

  • 免费、轻量,几 MB 内存就能跑;
  • 支持 RTMP 推流,也能转成 HLS 让浏览器直接看;
  • 配置直观,社区资料多。

安装

很多发行版自带带 rtmp 模块的 nginx(比如某些第三方仓库)。想自己编也行:

# Ubuntu 示例:装带 rtmp 模块的版本
sudo apt install libnginx-mod-rtmp

确认 nginx -V 输出里包含 --add-module=.../nginx-rtmp-module

配置 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;
        }
    }
}

然后在 http 块里加一个 location 把 HLS 暴露出来:

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

推流

用 OBS:设置 → 推流 → 服务选"自定义",服务器填 rtmp://你的IP/live,串流密钥随便起个名比如 room1。点开始推流,nginx 就开始收流并生成 /hls/room1.m3u8

也可以用 ffmpeg 直接推一个本地文件测通:

ffmpeg -re -i test.mp4 -c copy -f flv rtmp://你的IP/live/room1

拉流观看

  • 播放器(VLC)直接开 rtmp://你的IP/live/room1
  • 浏览器用 hls.js 或原生 HLS 播 http://你的IP/hls/room1.m3u8

加点鉴权

裸奔的推流地址谁都能推,生产环境加个 on_publish 校验:

application live {
    live on;
    on_publish http://你的后端/check;  # 后端返回 200 才允许推
}

常见问题

Q:延迟太高? RTMP 本身几百毫秒,HLS 切片会到几秒。要低延迟用 LL-HLS 或换 WebRTC(之前写过)。

Q:多人同时看卡? nginx-rtmp 是单点,量大得上 CDN 或多机。

Q:能录播吗?record off; 改成 record on; 并指定 record_path,推流同时落盘。

想亲手试试?用 VidDown 一键解析下载

粘贴视频链接即可解析,多平台支持、网页端即用;下载桌面客户端解锁海外平台本地解析,开通会员更享不限次下载。

顶部