Bluecherry 配置参数详解
Bluecherry 3.1.14 配置参数详解:三层配置体系(/etc/bluecherry.conf + GlobalSettings/Devices/Storage 配置表 + nginx 站点)逐参数实测讲解,schedule/motion_map 语法、录像轮转与计划覆盖热生效实测、生产配置模板与调优排障实录。
Bluecherry 配置参数详解
目标:系统讲解 Bluecherry 3.1.14 的三层配置体系——
/etc/bluecherry.conf服务端配置文件、MySQLGlobalSettings/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) |
二、前置条件
- 已按《Bluecherry .deb 裸机部署实战》完成安装,
systemctl is-active bluecherry为 active; - 具备 MySQL 访问能力(
mysql -u<用户> -p bluecherry,包配置默认建了 root/bluecherry 两个账号); - 能访问 Web 后台
https://<服务器IP>:7001(示例账号Admin/q1w2e3r4); - ⚠️ 动配置前先理解修改生效机制:Web 后台改的是数据库,bc-server 每 5 秒轮询配置表自动生效,无需重启;
/etc/bluecherry.conf只存数据库连接与健康令牌,改它才需要重启 bc-server。
三、配置查看与修改方式总览
Bluecherry 的配置分散在四处,按"改动频率"排列:
| 层 | 位置 | 谁在用 | 修改方式 | 生效方式 |
|---|---|---|---|---|
| 数据库配置表 | MySQL bluecherry 库:GlobalSettings(全局)、Devices(逐摄像头)、Storage(存储路径)、EventNotificationSchedules 等 | bc-server + Web 后台 | Web 后台界面(推荐)/ 直接 SQL | bc-server 5 秒轮询自动生效 |
| 服务端配置文件 | /etc/bluecherry.conf(libconfig 格式) | bc-server + Web 端 + 运维脚本 | 文本编辑 | systemctl restart bluecherry |
| Web 前端 | /etc/nginx/sites-enabled/bluecherry.conf | nginx | 文本编辑 | systemctl reload nginx |
| 环境级系统服务 | systemd 单元 /lib/systemd/system/bluecherry.service | systemd | systemctl edit --full bluecherry | systemctl daemon-reload && systemctl restart bluecherry |
三个配置表的分工(实测):
- GlobalSettings:全局键值对(22 项),键名以
G_前缀命名; - Devices:每路摄像头一行,40 个字段,覆盖接入、编码、侦测、计划、通知五类参数;
- Storage:存储路径表,支持多行(多磁盘)。
四、GlobalSettings 全局参数详解(实测全量)
select * from GlobalSettings 实测 dump(安装默认值,3.1.14):
| parameter | value(实测默认) | 含义与取值说明 |
|---|---|---|
| G_DVR_NAME | Bluecherry | NVR 显示名称,出现在界面标题与通知邮件中 |
| G_DATA_SOURCE | live | 客户端直播数据来源:live(摄像头实时流)或 buffer(预录缓冲流) |
| G_API_ENABLED | 0 | 是否启用旧版 API(1/0) |
| G_DISABLE_2FA | 0 | 禁用双因素认证(1/0) |
| G_DISABLE_DEBUG_OUTPUT | 1 | 关闭调试输出(1/0,生产保持 1) |
| G_DISABLE_ALL_LOGS | 0 | 关闭全部日志(1/0,生产保持 0) |
| G_DISABLE_SYSLOG | 0 | 关闭 syslog 输出(1/0);关闭后日志仅写 /var/log/bluecherry.log |
| G_ENABLE_TELNET | 0 | 启用 telnet 调试接口(1/0,严禁生产开启) |
| G_MAX_RECORD_TIME | 900 | 单个录像文件最大时长(秒),到点轮转新文件。实测改为 60 后无需重启即按约 62 秒/文件轮转(见 8.1) |
| G_DEV_SCED | 1 | 全局录像计划串(168 字符周计划,字符含义见 6.2);逐设备默认跟随此计划(schedule_override_global=0 时) |
| G_BUFFER_PRERECORDING | 3 | 移动侦测预录秒数(事件发生前也保留画面) |
| G_BUFFER_POSTRECORDING | 3 | 移动侦测后录秒数(事件结束后延长录像) |
| G_LIVEVIEW_VIDEO_METHOD | HLS | Web 实时预览方式:HLS(HTTP 切片)或 RTSP(7002 直连) |
| G_SMTP_FROM | admin@localhost | 通知邮件发件人地址 |
| G_SMTP_SUBJECT | Bluecherry notification | 通知邮件主题 |
| G_SMTP_HOST | localhost | SMTP 服务器地址 |
| G_SMTP_PORT | 25 | SMTP 端口(明文 25 / TLS 465 / STARTTLS 587) |
| G_SMTP_USE_TLS | none | SMTP 加密:none/ssl/tls |
| G_SMTP_USERNAME、G_SMTP_PASSWORD | (空) | SMTP 认证凭据 |
| G_SUBDOMAIN_DATA | 0 | 使用官方免费三级子域名服务(1/0) |
| G_SUBDOMAIN_VALUE | (空) | 子域名名称(配合 G_SUBDOMAIN_DATA) |
| G_VAAPI_DEVICE | /dev/dri/card0 | Intel 核显硬件编解码设备路径;实测无核显环境会自动回退软件解码(日志 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.type | 2 | 元数据库类型:0=sqlite、1=pgsql、2=mysql。官方 .deb 安装只自动化 mysql 路径,改 0/1 需自建表结构 |
| bluecherry.db.dbname | bluecherry | 库名 |
| bluecherry.db.user / password | bluecherry / bluecherry | 数据库账号。⚠️ 生产务必改强口令:MySQL 侧 ALTER USER 后同步改这里,且 Web 端与 load_db_creds.sh 都读该文件,一处改动全端生效 |
| bluecherry.db.host | localhost | 数据库地址;远程库填 IP(并放行 MySQL 远程访问) |
| bluecherry.db.userhost | localhost | Web 端连接所用主机标识 |
追加参数(本层还可追加 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_name | LabCam | 摄像头名称(日志前缀即此名) |
| protocol | IP-RTSP | 接入协议:IP-RTSP(网络摄像头)/ V4L2(本地采集卡) |
| device | 127.0.0.1|8554|/cam1 | 复合格式 主机|端口|RTSP路径(V4L2 时为 /dev/video0) |
| substream_path | (空) | 副码流路径(预览用低清流;主码流录像 + 副码流预览的省带宽配置) |
| rtsp_user / rtsp_pass | (空) | 摄像头认证账号 |
| onvif_port | 80 | ONVIF 端口(自动发现/PTZ 用) |
| onvif_events | 0 | 是否订阅 ONVIF 事件 |
| rtsp_rtp_prefer_tcp | 1 | RTSP over TCP(1)或 UDP(0);内网丢包少可 UDP,跨网段/防火墙建议 TCP |
| port(端口复用) | — | ONVIF 端口与 RTSP 端口都在 device 复合串中 |
6.2 录像计划参数(schedule 语法)
| 字段 | 实测值 | 说明 |
|---|---|---|
| schedule | CCCC...(168 字符) | 周计划串:168 个字符 = 7 天 × 24 小时,第 N 个字符对应"每周第 N 小时"。字符含义:C=持续录像、M=仅移动侦测录像、N=不录像。默认值 168 个 C(7×24 持续) |
| schedule_override_global | 0→实测改 1 | 0=跟随全局计划 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_algorithm | framebuffer | 侦测算法:framebuffer(帧间差分,默认)。多帧分析法(mmotion,8 帧时序)在 3.1.14 已废弃,升级后自动映射回 framebuffer |
| motion_map | 3333…(960 字符) | 侦测区域图:960 个字符 = 32×32 网格覆盖整个画面,每格一个数字代表侦测灵敏度档位:0=不检测、3=最高灵敏度(默认全 3 = 全画面检测)。把夜光误报区域(窗外、路灯)改为 0/1 是降噪的主要手段,Web 后台以可涂抹网格呈现 |
| frame_downscale_factor | 0 | 侦测前画面降采样倍数(0=不降,越大越省 CPU 但越不灵敏) |
| min_motion_area | 0.010 | 触发侦测的最小变化面积占比(1.0%),过滤细小噪点 |
| max_motion_area | 90.000 | 触发侦测的最大变化面积占比(90%),过滤全画面突变(如摄像头被遮挡/灯光突变) |
| motion_analysis_ssw_length | 1.0 | 滑动窗口时长(秒) |
| motion_analysis_ssw_percentage | 5.0 | 窗口内触发占比阈值(%) |
实测触发效果(testsrc2 动态画面 + 上述默认参数):日志连续输出 Motion event: area=16.244140%,事件落 EventsCam 表(type_id=motion),并按预录/后录参数生成 *-motion.mp4 录像段(文件名实测如 09-41-30-motion.mp4)。
6.4 编码与流参数
| 字段 | 实测默认 | 说明 |
|---|---|---|
| encoding | H264 | 期望编码(跟随摄像头流,bc-server 不转码、原样封装 MP4) |
| audio_encoding | AAC | 音频编码标识 |
| hls_window_size | 5 | HLS 预览滑动窗口切片数 |
| hls_segment_duration | 2.000 | HLS 单切片时长(秒) |
| substream_hls_window_size 等 | 0 | 副码流对应参数(启用副码流后生效) |
| width/height/fps | 0 | 期望分辨率/帧率覆盖(0=跟随源流) |
| rtsp_user/pass | 空 | 摄像头认证 |
| audio_gain_level | 1.000 | 音频增益 |
6.5 通知参数
| 字段 | 实测默认 | 说明 |
|---|---|---|
| motion_notification | 0 | 移动侦测事件通知开关(1=通知) |
| continuous_notification | 0 | 持续录像事件通知开关 |
| signal_loss_notification | 0 | 信号丢失通知开关(建议生产开启=1,摄像头掉线第一时间知晓) |
| notificationSchedules | (空) | 通知时段计划(逗号分隔的 EventNotificationSchedules 表 ID 列表) |
| webhooks | (空) | 出站 Webhook URL(逗号分隔多个),事件触发时 POST 通知 |
| debug_level | 2 | 逐设备日志级别(1=quiet/2=verbose/3=debug,实测默认 2) |
6.6 其他
| 字段 | 说明 |
|---|---|
| enabled / disabled | 0/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_thresh | 95 | 高水位阈值(%):使用率达 95% 触发清理 |
| min_thresh | 90 | 低水位阈值(%):清理到此使用率停止 |
| priority | 1 | 多存储路径时的写入优先级(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 节完整实录。两个易踩坑点复述:
- 只改
schedule不置schedule_override_global=1→ 永远跟随全局计划(这是"改了计划不生效"的头号原因); - 置位后需
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 参数验证的通用三板斧
- 看日志:
journalctl -u bluecherry --no-pager --since "5 min ago"或tail -f /var/log/bluecherry.log,设备级日志前缀I(<设备ID>/<设备名>); - 查表确认:
mysql -u root -p bluecherry -e "select …",Web 界面改的任何东西最终都在这三张表里; - 看接口:
/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% |
| 夜间误报高 | 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;即便内网调试,用完立即关闭。
十一、参考链接
- 服务端源码仓库(配置结构权威来源):https://github.com/bluecherrydvr/bluecherry-apps
- 服务端 3.1.14 发布公告(监控/稳定性相关参数背景):https://forums.bluecherrydvr.com/t/server-release-3-1-14/1050
- 官方论坛:https://forums.bluecherrydvr.com
- 站内配套阅读:《Bluecherry .deb 裸机部署实战》(安装实战)、《Bluecherry 常用命令与运维实战(核心篇)》(运维命令与排障)