You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将摄像头推流至自有服务器并转发至多台RTMP服务器

多RTMP服务器流转发的几种实现方案(含Node.js选项)

一、Node.js轻量流媒体库方案:Node-Media-Server

这是Node.js生态里专门做RTMP/HTTP-FLV/HLS的流媒体服务器,天生支持多目标转发,配置简单,适合快速集成到现有Node.js服务中。

实现步骤:

  1. 安装依赖:
npm install node-media-server
  1. 编写转发配置代码:
const NodeMediaServer = require('node-media-server');

const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 30,
    ping_timeout: 60
  },
  relay: {
    ffmpeg: '/usr/bin/ffmpeg', // 需确保服务器已安装FFmpeg
    tasks: [
      {
        app: 'live',
        mode: 'push',
        edge: 'rtmp://facebook.com/live/your-facebook-stream-key',
      },
      {
        app: 'live',
        mode: 'push',
        edge: 'rtmp://another-server.com/live/stream-key',
      }
    ]
  }
};

const nms = new NodeMediaServer(config);
nms.run();
  1. 摄像头推流到你的服务器rtmp://your-server-ip/live/stream-name,服务器会自动把流转发到配置里的多个RTMP目标。

适合场景:已有Node.js技术栈,需要快速搭建,并发量中等的场景。

二、Node.js封装FFmpeg命令行方案

FFmpeg是处理音视频的工业级工具,用Node.js调用FFmpeg子进程实现流转发,灵活性极高,支持编码格式转换、分辨率调整等额外处理。

实现步骤:

  1. 服务器先安装FFmpeg(根据系统用apt/yum/brew安装)
  2. Node.js代码示例:
const { spawn } = require('child_process');

// 输入流地址(摄像头推到你的服务器的地址)
const inputStream = 'rtmp://your-server-ip/live/stream-name';
// 多个转发目标
const outputStreams = [
  'rtmp://facebook.com/live/your-facebook-stream-key',
  'rtmp://another-server.com/live/stream-key'
];

// 构造FFmpeg命令参数
const args = [
  '-i', inputStream,
  '-c:v', 'copy', // 直接复制视频流,不重新编码,节省资源
  '-c:a', 'copy', // 直接复制音频流
  '-f', 'tee', // 用tee协议实现多输出
  outputStreams.map(url => `[f=flv]${url}`).join('|')
];

// 启动FFmpeg进程
const ffmpegProcess = spawn('ffmpeg', args);

// 监听进程输出,用于调试和错误处理
ffmpegProcess.stdout.on('data', (data) => {
  console.log(`FFmpeg stdout: ${data}`);
});

ffmpegProcess.stderr.on('data', (data) => {
  console.error(`FFmpeg stderr: ${data}`);
});

ffmpegProcess.on('close', (code) => {
  console.log(`FFmpeg进程退出,代码: ${code}`);
});

适合场景:需要对流转码、滤镜处理,或者转发目标协议不统一的场景;缺点是需要管理FFmpeg进程的生命周期,避免僵尸进程。

三、轻量SFU方案:MediaSoup转推配置

如果你已经了解SFU,MediaSoup可以作为高性能的流转发网关,支持将输入的RTMP流转推到多个RTMP端点,同时还支持WebRTC等其他协议,适合大规模并发场景。

核心思路:

  1. 配置MediaSoup的RtpObserver监听输入的RTMP流(需要先将RTMP转成RTP流,MediaSoup有对应的处理模块)
  2. 创建多个Producer将流推送到不同的RTMP服务器(需要用FFmpeg或MediaSoup的扩展模块完成RTP到RTMP的转换)

适合场景:需要支持多协议(RTMP/WebRTC/HLS)、高并发直播,未来可能扩展更多功能的生产环境。

四、Nginx RTMP模块方案

Nginx加上RTMP模块是生产环境中性能极高的流媒体网关,资源占用低,稳定性强,适合大流量场景。

配置示例:

在Nginx配置文件中添加RTMP区块:

rtmp {
    server {
        listen 1935;
        chunk_size 4096;

        application live {
            live on;
            # 转发到多个RTMP目标
            push rtmp://facebook.com/live/your-facebook-stream-key;
            push rtmp://another-server.com/live/stream-key;
        }
    }
}

重启Nginx后,摄像头推流到rtmp://your-nginx-ip/live/stream-name,Nginx会自动转发到配置的目标。

适合场景:纯流媒体转发,高并发、低延迟要求的生产环境;如果需要动态调整转发目标,可以用Nginx Lua脚本扩展。


内容的提问来源于stack exchange,提问作者david correa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 23:45:34