录制与回放
适用于 MiBeeNvr v0.13.0
MiBee NVR 将摄像头视频流录制为 MP4 片段并保存到磁盘,提供 Web 界面用于回放、搜索和下载录像。
录制原理
- 帧采集:从摄像头获取视频帧(RTSP / ONVIF / SRT / RTMP / libcamera)
- 封装:使用 MP4 容器封装视频帧(H.264 / H.265)
- 分段:按配置的时间间隔切分为 MP4 片段文件
- 索引:SQLite 数据库记录每个片段的元数据(时间、摄像头、文件路径等)
- 清理:根据保留策略自动删除过期片段
录制密度策略
每路相机可选两种录像模式(recording_mode):
| 模式 | 行为 | 适用 |
|---|---|---|
continuous(默认) |
全帧率连续录制 | 常规监控 |
adaptive |
动静感知——安静时段自动降为延时级稀疏写入,活动 / 音频 / 外部触发立即恢复全帧率 | 看家、楼道、仓库等长时间无人的场景,磁盘占用直降 75%+ |
自适应模式的调参、音频触发、环境声氛围层与活动检索见 自适应录制 专页。
默认行为
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 录像目录 | /var/lib/mibee-nvr(storage.root_dir) |
Docker 部署为数据卷(默认 /data) |
| 片段时长 | 30 秒 | storage.segment_duration 可改(10s ~ 5m) |
| 保留天数 | 30 天 | cleanup.retention_days,超过自动删除 |
| 磁盘占用 | ~1GB/天/摄像头 | 1080p H.264 预估;自适应模式可再降 75%+ |
配置录制
录制设置
storage:
root_dir: "/var/lib/mibee-nvr" # 录像存储根路径
segment_duration: "30s" # 片段时长(10s ~ 5m)
cleanup:
retention_days: 30 # 保留天数
片段时长选择
| 时长 | 优点 | 缺点 |
|---|---|---|
| 10s-30s | 快速加载、节省内存 | 文件数量多、I/O 频繁 |
| 1m(推荐) | 平衡性能和资源 | — |
| 2m-5m | 文件数量少 | 内存占用高、加载慢 |
保留策略
- 按天数:
max_days: 30保留最近 30 天 - 按磁盘:监控磁盘使用量,自动清理最旧的片段
- 手动:在 Web UI 中手动删除片段,或用
mibee-nvr cleanup按日期 / 孤儿文件批量清理
Web UI 回放
访问录像
- 打开 Web 界面,进入「录像」页
- 顶部工具栏可按类型筛选(全部 / 视频 / 延时摄影 / MJPEG)、按摄像头和 AI 检测(含人 / 含车)过滤、按活动过滤(有活动 / 安静 / 场景切换,可设最低活动分),或用搜索框检索
- 通过月份切换器和日历选择日期,定位到有录像的一天
- 「时间轴」视图下点击或拖拽时间轴定位播放;「列表」视图下点击片段的「查看」进入回放
时间轴视图
「录像」页默认以时间轴展示每个摄像头当天的录像覆盖情况,AI 检测事件以标记点的形式叠放在轨道上:

- 轨道填充:该时间段有录像;轨道内容按图例分三类——视频、延时采样(稀疏采样的原始延时段)、延时录像(已合并的延时片段)
- 延时条播放:已合并的延时录像条带点击即可直接播放
- AI 标记:悬停可查看事件摘要(类别、目标、出现次数),点击可跳转到对应时刻
- now 指示:当前时间位置
列表视图
点击「列表」切换为分页列表,每行显示摄像头、格式(MP4 (HEVC) / JPEG 等)、时长、大小、开始时间与合并状态,支持多选批量删除:

长时间段的连续片段会被自动合并(标记为「已合并」),回放时按一个整体加载。
回放详情
在列表中点击「查看」进入回放页:播放器支持拖动进度条定位、倍速、快照,页面还提供下载与元数据信息:

延时录像同样在此统一回放:
- 「延时回放」视图下可在帧浏览(可拖动定位、跨段连续播放)与原实时流(保留音频、不可拖动)两种模式间切换
- 未合并的延时段支持「合并并播放」——实时显示合并进度与预计剩余时间,完成后自动开始播放;任务可取消,失败可重试
- 预览帧缩略图帮助快速定位目标时刻
搜索录像
支持按时间范围搜索:
- 选择摄像头
- 设置开始和结束时间
- 点击「搜索」
- 从结果中选择片段播放
下载录像
单个片段下载
在 Web UI 中:
- 找到目标片段
- 点击「下载」按钮
- 保存为 MP4 文件
批量下载
# 使用 WebDAV 下载
rclone copy nvr:/recordings/camera-id/2026-08-18/ ./local-folder/
# 使用 FTP 下载
wget -r ftp://admin:password@192.168.1.50:2121/recordings/camera-id/
按时间范围导出
没有一次导出整段区间的端点;按时间定位片段后逐段下载即可(合并后的长片段通常一段就是一整天):
# 列出时间范围内的录像,逐段下载(支持 Range 断点续传)
curl -u admin:password \
"http://192.168.1.50:9090/api/recordings?camera_id=front-door&start=2026-08-18T00:00:00Z&end=2026-08-18T12:00:00Z"
curl -u admin:password \
-o segment.mp4 \
"http://192.168.1.50:9090/api/recordings/{id}/download"
存储统计
两处查看:
- 「仪表盘」→「存储趋势」:每摄像头占用 / 段数 / 占比,每日写入量堆叠趋势图(图例可点选隔离)
- 「设置」→「存储」:存储路径、候选卷与录像迁移

| 指标 | 说明 |
|---|---|
| 总占用 | 所有录像的磁盘占用 |
| 今日新增 | 今天录制的数据量 |
| 摄像头分布 | 每个摄像头的磁盘占用 |
| 趋势图 | 过去 7/30 天的存储趋势 |
录制状态
健康录制
在 Web UI 中,摄像头状态应显示为绿色(录制中)。
录制错误
常见错误及解决方法:
| 错误 | 原因 | 解决方法 |
|---|---|---|
| 摄像头离线 | 网络问题或摄像头关机 | 检查网络连接 |
| 权限被拒 | 存储目录不可写 | 检查目录权限 |
| 磁盘已满 | 存储空间不足 | 增加磁盘或调整保留策略 |
| 编码不支持 | 摄像头编码格式不在支持列表 | 检查 encoding 字段配置 |
录制日志
NVR 日志输出到标准输出(systemd 部署进 journald):
# systemd 部署:查看录制相关日志
journalctl -u mibee-nvr -f | grep -i record
# Docker 部署
docker compose logs -f mibee-nvr | grep -i record
高级功能
自适应录制
安静时段自动降为稀疏关键帧写入、有活动立即恢复全帧率——详见 自适应录制。
cameras:
- id: "front-door"
recording_mode: "adaptive" # 默认 "continuous"
录制时间窗
限制录像到特定时间段(如仅白天),时间窗外不落盘:
cameras:
- id: "office-cam"
recording_schedule:
time_ranges:
- start: "09:00"
end: "18:00"
days_of_week: [1, 2, 3, 4, 5] # 0=周日 … 6=周六;空 = 每天
外部事件触发录制
MQTT 消息、脚本或 AI 后端可把相机拉回全帧率(配合自适应模式 = 事件驱动录制):
curl -u admin:password -X POST \
http://192.168.1.50:9090/api/cameras/front-door/adaptive/trigger \
-H "Content-Type: application/json" \
-d '{"source": "automation", "hold": "30s"}'
MQTT 集成见 MQTT 集成。
常见问题
录像文件无法播放
- 确认播放器支持 H.265 编码(推荐 VLC)
- 尝试转换编码格式(
ffmpeg -i input.mp4 -c:v libx264 output.mp4)
录像文件损坏
- NVR 的分段写入使用「临时文件 + 原子重命名」,录制中异常终止不会损坏已落盘的片段
- 若个别文件仍无法播放,通常是源流本身断连瞬间的参考帧缺失——用 NVR 的 Web 回放验证(前端有容错解码);确需修复可尝试
ffmpeg -i input.mp4 -c copy output.mp4