Bluecherry 配置参数详解

Bluecherry 3.1.14 配置参数详解:三层配置体系(/etc/bluecherry.conf + GlobalSettings/Devices/Storage 配置表 + nginx 站点)逐参数实测讲解,schedule/motion_map 语法、录像轮转与计划覆盖热生效实测、生产配置模板与调优排障实录。

BluecherryBluecherry视频监控2026/10/28

Bluecherry 配置参数详解

目标:系统讲解 Bluecherry 3.1.14 的三层配置体系——/etc/bluecherry.conf 服务端配置文件、MySQL GlobalSettings/Devices/Storage 配置表(Web 后台读写的数据源头)、nginx 站点配置,逐参数给出实测含义、取值格式与修改方法,并给出生产配置模板与排障沉淀。全部参数取值来自本机实测环境(Ubuntu 22.04 + Bluecherry 3.1.14,部署过程见《Bluecherry .deb 裸机部署实战》)。

一、环境信息

项目内容
操作系统Ubuntu 22.04.5 LTS(隔离环境模拟裸机,行为与物理机一致)
软件版本Bluecherry 3.1.14(包版本 3:3.1.14)
配套组件nginx 1.18.0 / PHP 7.4.33 / MySQL 8.0.43 / rrdtool
实测日期2026-10-28
实测摄像头ffmpeg 合成 RTSP 流两路(持续录像 LabCam + 移动侦测 MotionCam)

二、前置条件

  1. 已按《Bluecherry .deb 裸机部署实战》完成安装,systemctl is-active bluecherry 为 active;
  2. 具备 MySQL 访问能力(mysql -u<用户> -p bluecherry,包配置默认建了 root/bluecherry 两个账号);
  3. 能访问 Web 后台 https://<服务器IP>:7001(示例账号 Admin/q1w2e3r4);
  4. ⚠️ 动配置前先理解修改生效机制:Web 后台改的是数据库,bc-server 每 5 秒轮询配置表自动生效,无需重启;/etc/bluecherry.conf 只存数据库连接与健康令牌,改它才需要重启 bc-server。

三、配置查看与修改方式总览

Bluecherry 的配置分散在四处,按"改动频率"排列:

层位置谁在用修改方式生效方式
数据库配置表MySQL bluecherry 库:GlobalSettings(全局)、Devices(逐摄像头)、Storage(存储路径)、EventNotificationSchedules 等bc-server + Web 后台Web 后台界面(推荐)/ 直接 SQLbc-server 5 秒轮询自动生效
服务端配置文件/etc/bluecherry.conf(libconfig 格式)bc-server + Web 端 + 运维脚本文本编辑systemctl restart bluecherry
Web 前端/etc/nginx/sites-enabled/bluecherry.confnginx文本编辑systemctl reload nginx
环境级系统服务systemd 单元 /lib/systemd/system/bluecherry.servicesystemdsystemctl edit --full bluecherrysystemctl daemon-reload && systemctl restart bluecherry

三个配置表的分工(实测):

  • GlobalSettings:全局键值对(22 项),键名以 G_ 前缀命名;
  • Devices:每路摄像头一行,40 个字段,覆盖接入、编码、侦测、计划、通知五类参数;
  • Storage:存储路径表,支持多行(多磁盘)。

四、GlobalSettings 全局参数详解(实测全量)

select * from GlobalSettings 实测 dump(安装默认值,3.1.14):

parametervalue(实测默认)含义与取值说明
G_DVR_NAMEBluecherryNVR 显示名称,出现在界面标题与通知邮件中
G_DATA_SOURCElive客户端直播数据来源:live(摄像头实时流)或 buffer(预录缓冲流)
G_API_ENABLED0是否启用旧版 API(1/0)
G_DISABLE_2FA0禁用双因素认证(1/0)
G_DISABLE_DEBUG_OUTPUT1关闭调试输出(1/0,生产保持 1)
G_DISABLE_ALL_LOGS0关闭全部日志(1/0,生产保持 0)
G_DISABLE_SYSLOG0关闭 syslog 输出(1/0);关闭后日志仅写 /var/log/bluecherry.log
G_ENABLE_TELNET0启用 telnet 调试接口(1/0,严禁生产开启)
G_MAX_RECORD_TIME900单个录像文件最大时长(秒),到点轮转新文件。实测改为 60 后无需重启即按约 62 秒/文件轮转(见 8.1)
G_DEV_SCED1全局录像计划串(168 字符周计划,字符含义见 6.2);逐设备默认跟随此计划(schedule_override_global=0 时)
G_BUFFER_PRERECORDING3移动侦测预录秒数(事件发生前也保留画面)
G_BUFFER_POSTRECORDING3移动侦测后录秒数(事件结束后延长录像)
G_LIVEVIEW_VIDEO_METHODHLSWeb 实时预览方式:HLS(HTTP 切片)或 RTSP(7002 直连)
G_SMTP_FROMadmin@localhost通知邮件发件人地址
G_SMTP_SUBJECTBluecherry notification通知邮件主题
G_SMTP_HOSTlocalhostSMTP 服务器地址
G_SMTP_PORT25SMTP 端口(明文 25 / TLS 465 / STARTTLS 587)
G_SMTP_USE_TLSnoneSMTP 加密:none/ssl/tls
G_SMTP_USERNAME、G_SMTP_PASSWORD(空)SMTP 认证凭据
G_SUBDOMAIN_DATA0使用官方免费三级子域名服务(1/0)
G_SUBDOMAIN_VALUE(空)子域名名称(配合 G_SUBDOMAIN_DATA)
G_VAAPI_DEVICE/dev/dri/card0Intel 核显硬件编解码设备路径;实测无核显环境会自动回退软件解码(日志 Failed to open VAAPI device... falling back to software decoding),该字段留空/无效均不影响功能

💡 技术拓展:G_ 前缀键不是固定封闭集合——bc-server 兼容在 GlobalSettings 表里动态增行。升级版本时新参数以新行出现,旧版本会忽略未知键,这让 GlobalSettings 成为"前向兼容"的配置面。生产变更时建议只改已有键,不擅自发明新键。

五、/etc/bluecherry.conf 服务端配置文件详解

实测全文(19 行):

# Bluecherry configuration file

# Used to be sure we don't use configurations not suitable for us
version = "1.0";

bluecherry:
{
  db:
  {
    # 0 = sqlite, 1 = pgsql, 2 = mysql
    type = 2;
    dbname = "bluecherry";
    user = "bluecherry";
    password = "bluecherry";
    host = "localhost";
    userhost = "localhost";
  };
};
参数实测默认说明
version"1.0"配置格式版本校验,勿改
bluecherry.db.type2元数据库类型:0=sqlite、1=pgsql、2=mysql。官方 .deb 安装只自动化 mysql 路径,改 0/1 需自建表结构
bluecherry.db.dbnamebluecherry库名
bluecherry.db.user / passwordbluecherry / bluecherry数据库账号。⚠️ 生产务必改强口令:MySQL 侧 ALTER USER 后同步改这里,且 Web 端与 load_db_creds.sh 都读该文件,一处改动全端生效
bluecherry.db.hostlocalhost数据库地址;远程库填 IP(并放行 MySQL 远程访问)
bluecherry.db.userhostlocalhostWeb 端连接所用主机标识

追加参数(本层还可追加 bc-server 启动参数,3.1.14 实测有效的一项):

参数示例说明
bluecherry.access_token"bluecherry-health-token";健康检查接口的 Bearer 令牌。配置后 GET /ajax/health.php/ping 需带 Authorization: Bearer <token>;实测未配置时该接口返回 401。语法:在 bluecherry: 块内追加 access_token = "…";

修改本文件必须重启:systemctl restart bluecherry(Web 端 PHP 也会随之读取新值,无需重启 nginx)。

六、Devices 表逐摄像头参数详解(实测字段全量)

select * from Devices 实测字段(按功能分组讲解,id=1 LabCam 持续录像 + id=2 MotionCam 移动侦测两路实测值):

6.1 接入参数

字段实测值说明
device_nameLabCam摄像头名称(日志前缀即此名)
protocolIP-RTSP接入协议:IP-RTSP(网络摄像头)/ V4L2(本地采集卡)
device127.0.0.1|8554|/cam1复合格式 主机|端口|RTSP路径(V4L2 时为 /dev/video0)
substream_path(空)副码流路径(预览用低清流;主码流录像 + 副码流预览的省带宽配置)
rtsp_user / rtsp_pass(空)摄像头认证账号
onvif_port80ONVIF 端口(自动发现/PTZ 用)
onvif_events0是否订阅 ONVIF 事件
rtsp_rtp_prefer_tcp1RTSP over TCP(1)或 UDP(0);内网丢包少可 UDP,跨网段/防火墙建议 TCP
port(端口复用)—ONVIF 端口与 RTSP 端口都在 device 复合串中

6.2 录像计划参数(schedule 语法)

字段实测值说明
scheduleCCCC...(168 字符)周计划串:168 个字符 = 7 天 × 24 小时,第 N 个字符对应"每周第 N 小时"。字符含义:C=持续录像、M=仅移动侦测录像、N=不录像。默认值 168 个 C(7×24 持续)
schedule_override_global0→实测改 10=跟随全局计划 G_DEV_SCED;1=使用本行 schedule。实测关键坑:直接 UPDATE Devices.schedule 后不生效,必须同时置 schedule_override_global=1 并重启 bluecherry 服务(日志 Starting schedule transition 才出现)

实测把 MotionCam 切到移动侦测计划的完整命令(可在维护窗口执行):

mysql -u root -p bluecherry -e \
  "update Devices set schedule=repeat('M',168), schedule_override_global=1 where id=2;"
systemctl restart bluecherry
journalctl -u bluecherry --no-pager --since "1 min ago" | grep MotionCam

实测回显:

I(2/MotionCam): Device 2: Starting schedule transition to 'motion'
I(2/MotionCam): Device 2: Successfully completed schedule transition to 'motion'

6.3 移动侦测参数

字段实测默认说明
motion_algorithmframebuffer侦测算法:framebuffer(帧间差分,默认)。多帧分析法(mmotion,8 帧时序)在 3.1.14 已废弃,升级后自动映射回 framebuffer
motion_map3333…(960 字符)侦测区域图:960 个字符 = 32×32 网格覆盖整个画面,每格一个数字代表侦测灵敏度档位:0=不检测、3=最高灵敏度(默认全 3 = 全画面检测)。把夜光误报区域(窗外、路灯)改为 0/1 是降噪的主要手段,Web 后台以可涂抹网格呈现
frame_downscale_factor0侦测前画面降采样倍数(0=不降,越大越省 CPU 但越不灵敏)
min_motion_area0.010触发侦测的最小变化面积占比(1.0%),过滤细小噪点
max_motion_area90.000触发侦测的最大变化面积占比(90%),过滤全画面突变(如摄像头被遮挡/灯光突变)
motion_analysis_ssw_length1.0滑动窗口时长(秒)
motion_analysis_ssw_percentage5.0窗口内触发占比阈值(%)

实测触发效果(testsrc2 动态画面 + 上述默认参数):日志连续输出 Motion event: area=16.244140%,事件落 EventsCam 表(type_id=motion),并按预录/后录参数生成 *-motion.mp4 录像段(文件名实测如 09-41-30-motion.mp4)。

6.4 编码与流参数

字段实测默认说明
encodingH264期望编码(跟随摄像头流,bc-server 不转码、原样封装 MP4)
audio_encodingAAC音频编码标识
hls_window_size5HLS 预览滑动窗口切片数
hls_segment_duration2.000HLS 单切片时长(秒)
substream_hls_window_size 等0副码流对应参数(启用副码流后生效)
width/height/fps0期望分辨率/帧率覆盖(0=跟随源流)
rtsp_user/pass空摄像头认证
audio_gain_level1.000音频增益

6.5 通知参数

字段实测默认说明
motion_notification0移动侦测事件通知开关(1=通知)
continuous_notification0持续录像事件通知开关
signal_loss_notification0信号丢失通知开关(建议生产开启=1,摄像头掉线第一时间知晓)
notificationSchedules(空)通知时段计划(逗号分隔的 EventNotificationSchedules 表 ID 列表)
webhooks(空)出站 Webhook URL(逗号分隔多个),事件触发时 POST 通知
debug_level2逐设备日志级别(1=quiet/2=verbose/3=debug,实测默认 2)

6.6 其他

字段说明
enabled / disabled0/1 启停该路摄像头(disabled=1 后 bc-server 停止拉流)
monitor实时监控页显示开关
fixed_export_duration导出片段固定时长(秒,0=按事件)
is_motion_events_extension移动事件延展模式(关联事件合并)
limit_length / limit_length_length回放长度限制开关与值

七、Storage 表与存储参数

实测表结构与默认行:

mysql -u root -p bluecherry -e "select * from Storage\G"

实测回显:

         id: 1
       path: /var/lib/bluecherry/recordings
 max_thresh: 95
 min_thresh: 90
    priority: 1
  free_space: 133704138752
字段实测默认说明
path/var/lib/bluecherry/recordings存储根目录(录像按 年/月/日/设备ID 落此路径下)
max_thresh95高水位阈值(%):使用率达 95% 触发清理
min_thresh90低水位阈值(%):清理到此使用率停止
priority1多存储路径时的写入优先级(1 最高);多块磁盘各加一行即实现多盘轮写
free_space(动态)bc-server 定期回写的剩余空间(字节)

运行期自检日志(每 5 分钟):

I(): Storage path /var/lib/bluecherry/recordings below threshold: 41.3% <= 95.0%

⚠️ 清理逻辑只删"已归档"或超期媒体索引对应的文件并同步 Media 表(3.1.14 的 DB/文件系统同步修复就是针对此),不要手工 rm 录像文件——会造成索引"孤儿",正确做法走归档 + 官方清理机制(见《Bluecherry 常用命令与运维实战(核心篇)》)。

八、参数修改实测与验证方法

8.1 实测:录像文件轮转时长(G_MAX_RECORD_TIME)

需求:短文件快速轮转(如演示环境),验证全局参数热生效。

mysql -u root -p bluecherry -e \
  'update GlobalSettings set value=60 where parameter="G_MAX_RECORD_TIME";'

无需重启。等待约 90 秒后查看录像目录:

-rw-rw---- 1 bluecherry bluecherry 29597698 Oct 28 09:40 09-26-21.mp4   ← 改前旧段(补齐到轮转点)
-rw-rw---- 1 bluecherry bluecherry  2167103 Oct 28 09:41 09-40-28.mp4   ← 新参数生效段(62 秒)
-rw-rw---- 1 bluecherry bluecherry   524336 Oct 28 09:41 09-41-30.mp4   ← 62 秒后再次轮转

实测结论:GlobalSettings 修改即热生效(bc-server 5 秒轮询),旧段在当前轮转点收尾,之后严格按新时长切片。验证后恢复 value=900。

8.2 实测:设备级计划覆盖(schedule_override_global)

见 6.2 节完整实录。两个易踩坑点复述:

  1. 只改 schedule 不置 schedule_override_global=1 → 永远跟随全局计划(这是"改了计划不生效"的头号原因);
  2. 置位后需 systemctl restart bluecherry 才触发计划切换(比 GlobalSettings 的热轮询多一步,属计划引擎的重估时点设计)。

8.3 实测:健康检查令牌(access_token)

# 未配置时:
curl -sk https://127.0.0.1:7001/ajax/health.php/ping

实测回显:

{
    "status": 401,
    "error": "Unauthorized",
    "code": 401,
    "message": "Authorization token is missing or invalid",
    "timestamp": "2026-10-28T09:28:20+00:00"
}

在 /etc/bluecherry.conf 的 bluecherry: 块内追加 access_token = "bluecherry-health-token"; 后 systemctl restart bluecherry:

curl -sk -H "Authorization: Bearer bluecherry-health-token" https://127.0.0.1:7001/ajax/health.php/ping

实测回显:

{
    "status": 200,
    "message": "Service is healthy"
}

8.4 参数验证的通用三板斧

  1. 看日志:journalctl -u bluecherry --no-pager --since "5 min ago" 或 tail -f /var/log/bluecherry.log,设备级日志前缀 I(<设备ID>/<设备名>);
  2. 查表确认:mysql -u root -p bluecherry -e "select …",Web 界面改的任何东西最终都在这三张表里;
  3. 看接口:/ajax/stats.php(JSON 系统统计:CPU/内存/磁盘/设备状态)与 /ajax/health.php/ping(需 access_token)。

九、生产配置模板

9.1 8 路 1080p 中小规模(单机单盘)

-- 全局:改文件 15 分钟轮转,预/后录各 5 秒
update GlobalSettings set value=900 where parameter='G_MAX_RECORD_TIME';
update GlobalSettings set value=5  where parameter='G_BUFFER_PRERECORDING';
update GlobalSettings set value=5  where parameter='G_BUFFER_POSTRECORDING';
-- 全局周计划:工作日 7-19 点移动侦测、其余持续录像(字符位 = 周×24+小时)
update GlobalSettings set value=concat(repeat('C',31),repeat('M',12),repeat('C',77),repeat('C',31),repeat('M',12),repeat('C',17)) where parameter='G_DEV_SCED';
-- 摄像头:内网 TCP 拉流 + 信号丢失通知
update Devices set rtsp_rtp_prefer_tcp=1, signal_loss_notification=1, motion_notification=1;
-- 存储:90% 触发清理到 85%(给系统留余量)
update Storage set max_thresh=90, min_thresh=85;
# /etc/bluecherry.conf 追加(健康监控接入)
access_token = "生成一个强随机串";

9.2 分场景推荐值速查

场景关键参数建议
7×24 全程存证(合规)schedule 全 C;G_MAX_RECORD_TIME=900;存储配双路径优先级轮写
事件存证省盘(默认推荐)schedule 全 M;min/max_motion_area 按现场调(1%5% 起试);预/后录 35 秒
夜间误报高motion_map 把窗外/灯光格子改 0/1;frame_downscale_factor=1;G_DISABLE_DEBUG_OUTPUT=1
弱网/跨网段rtsp_rtp_prefer_tcp=1;副码流 substream_path 启用(预览走低清流)
有监控告警体系access_token 配置;信号丢失通知 + webhook 出站对接

十、常见问题(FAQ,含排障实录)

Q1:改了 Devices.schedule 移动侦测不生效? 实录:直接 UPDATE schedule=repeat('M',168) 后日志无任何 transition 记录。原因:schedule_override_global=0 时逐设备计划被全局计划覆盖(bc-server 读的是全局串)。修复:update Devices set schedule_override_global=1 where id=N; systemctl restart bluecherry,日志出现 Schedule transition to 'motion' 即生效。

Q2:改 GlobalSettings 需要重启吗? 不需要(实测 8.1 热生效)。需要重启的是 /etc/bluecherry.conf(access_token/db 连接)与 systemd 单元级改动。

Q3:日志刷 Failed to open VAAPI device /dev/dri/card0 ... falling back to software decoding? 实测复现:无核显的纯 CPU 服务器上 G_VAAPI_DEVICE 指向不存在的 DRI 设备,bc-server 自动回退软解,不影响功能。有 Intel 核显时可把核显用于解码以降 CPU(ls /dev/dri/ 确认设备存在),纯 CPU 环境可忽略该日志。

Q4:Web 后台改的配置在哪个文件? 不在文件里——Web 后台读写 MySQL 三张配置表(GlobalSettings/Devices/Storage)。"导出配置"的实质是备份这三张表(mysqldump 指定表即可,见运维篇)。

Q5:移动事件文件名为何带 -motion 后缀?命名规则? 实测:持续录像段 HH-MM-SS.mp4,移动侦测段 HH-MM-SS-motion.mp4,同目录同设备,缩略图同名 .jpg。按后缀即可批量区分两类录像。

Q6:Media 表里 end=1970-01-01、size=NULL 的行是什么? 实测:当前正在写入的录像段(未收尾,结束时间用 epoch 0 占位),段关闭(轮转/事件结束)后自动补全 start/end/size。监控脚本判断"活动段"即查 end=0。

Q7:motion_algorithm 能选多帧分析法吗? 3.1.14 实测只能 framebuffer(mmotion 已废弃,升级迁移时自动映射)。侦测调优走 motion_map + min/max_motion_area + 降采样组合。

Q8:G_ENABLE_TELNET 开了有什么风险? 调试用 telnet 接口(明文、无认证),等于把 NVR 控制权暴露在端口上。生产永远 0;即便内网调试,用完立即关闭。

十一、参考链接

  1. 服务端源码仓库(配置结构权威来源):https://github.com/bluecherrydvr/bluecherry-apps
  2. 服务端 3.1.14 发布公告(监控/稳定性相关参数背景):https://forums.bluecherrydvr.com/t/server-release-3-1-14/1050
  3. 官方论坛:https://forums.bluecherrydvr.com
  4. 站内配套阅读:《Bluecherry .deb 裸机部署实战》(安装实战)、《Bluecherry 常用命令与运维实战(核心篇)》(运维命令与排障)