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

Node-Media-Server搭建家用安防流媒体服务摄像头离线、FFmpeg异常问题求助

问题原因

1. 摄像头偶尔不显示在流面板

  • 你使用的静态RTSP拉流配置默认没有自动重连机制,树莓派Zero W的WiFi本身稳定性较差,一旦出现网络波动断流,NMS不会主动重新拉取摄像头的RTSP流,导致流从面板消失。
  • 你自定义的每小时切片逻辑中,kill转码FFmpeg进程时未同步通知NMS重置拉流会话,加上树莓派A+性能有限,4路流同时处理时CPU占用过高,容易导致拉流会话超时被销毁。
  • 日志中出现的cron.hourly定时任务执行时会占用系统资源,进一步加剧性能不足导致的会话断连问题。

2. FFmpeg进程残留、仅能播放前2-3秒

  • 你修改的node_trans_session.js中,第一个FFmpeg进程的close回调里注释了this.emit('end'),导致FFmpeg退出后NMS不知道会话已经结束,面板依然显示流存在,但实际流已经中断,仅能播放缓存的GOP前几秒内容。
  • 你自定义的切片逻辑中kill FFmpeg时仅使用默认的SIGTERM信号,FFmpeg卡住时无法正常退出,会变成僵尸进程占用流资源,新启动的FFmpeg无法正常推流,导致播放失败。
  • 20秒一次的整点轮询逻辑存在重复触发的问题,同一整点可能多次执行kill操作,导致FFmpeg进程冲突残留。

解决方案

针对摄像头不显示问题

  • 修改app.js中的relay配置,给每个拉流任务增加自动重连参数:
tasks: [
  {
    app: 'live',
    mode: 'static',
    edge: 'rtsp://11.11.11.2:8554/live',
    name: 'cam1',
    rtsp_transport : 'tcp',
    retry_delay: 3000,
    retry_max: 0 // 0代表无限重试
  },
  // 其他3个摄像头配置同步增加上述两个参数
]
  • 给所有树莓派Zero W关闭WiFi省电模式,在/etc/rc.local中新增一行iw dev wlan0 set power_save off后重启,降低WiFi断连概率。
  • 降低摄像头推流的码率和分辨率,建议改成720P 15帧、码率512Kbps以内,减少树莓派A+的CPU占用。

针对FFmpeg残留播放卡顿问题

  • 恢复node_trans_session.js中第一个FFmpeg close回调里的this.emit('end')代码,确保FFmpeg退出后NMS能同步销毁旧会话。
  • 修改所有kill FFmpeg的逻辑,优先发SIGINT信号,超时未退出再发强杀信号,避免僵尸进程:
// 替换原来的this.ffmpeg_exec.kill()
this.ffmpeg_exec.kill('SIGINT');
setTimeout(() => {
  if(this.ffmpeg_exec && !this.ffmpeg_exec.killed) {
    this.ffmpeg_exec.kill('SIGKILL');
  }
}, 1000);
  • 优化整点切片的轮询逻辑,增加时间戳判断避免重复触发,同时把轮询间隔改成1秒:
// 在constructor中新增变量
this.lastCutTime = 0;
// 轮询逻辑中增加判断
const now = Date.now();
if (new Date().getMinutes() === 0 && new Date().getHours() % 12 !== 0) {
  if (now - this.lastCutTime < 3600000) return;
  this.lastCutTime = now;
  // 原有切片逻辑
}
  • 建议把Node版本降级到14.x LTS版本,Node-Media-Server对Node 16的兼容性较差,容易出现异步会话处理异常。

内容的提问来源于stack exchange,提问作者Android'e Doğru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 12:57:03