轻量级的网络视频录像机OneNVR

本文题图中 NVR logo 由 AI 生成;

简介

什么是 OneNVR ?

OneNVR 是一个简单轻量的网络视频录像机(NVR),旨在运行于廉价硬件上,例如带有硬盘驱动器的 Raspberry Pi,支持从网络摄像头 24/7 录制视频流。用户可以通过本地网页界面浏览录制的文件。

主要特点

  1. 轻量级设计:专为低成本硬件优化,易于部署。
  2. 视频流保存:从网络摄像头录制的视频保存为 5 分钟的文件,以防文件损坏导致数据丢失。
  3. 自动文件处理:每日自动将前一天的视频文件连接为 24 小时的单一文件,并删除过期视频。
  4. 灵活配置:通过 config.yaml 文件配置,如视频保留天数、合并时间和删除时间等。
  5. **使用 ffmpeg**:依赖 ffmpeg 进行视频流的连接和录制。
  6. 容器化部署:支持 Docker 部署,易于安装和管理。

应用场合

  • 家庭监控:适合家庭用户用于监控家庭安全。
  • 小型企业:可用于小型企业的安全监控,成本低廉。
  • DIY 项目:适合爱好者和开发者进行自定义监控解决方案。

总之,OneNVR 是一个理想的选择,适合需要简单、低成本视频监控解决方案的用户。

准备

网络摄像头

OneNVR 是个网络视频录像机,所以首先要有用于录像的网络摄像头,其次要知道其接像地址,例如老苏的联想 C2E

1
2
3
4
5
# 主流:1080P@15@H.264
rtsp://username:password@ip:port/live/ch00_0

# 子流:640*360@15@H.264
rtsp://username:password@ip:port/live/ch00_1
  • username:用户名,登录联想慧眼 app 的手机号;
  • password:密码,登录联想慧眼 app 的密码;
  • ip:为设备的局域网 IP
  • port:端口号为 554

配置文件

接下来就可以准备配置文件 config.yaml

1
2
3
4
5
6
7
8
9
10
cameras:
- name: lenovo
rtsp_url: rtsp://username:password@192.168.0.128:554/live/ch00_0
codec: copy
interval: 300

retention_days: 7
concatenation: true
concatenation_time: "02:00"
deletion_time: "01:00"

配置字段的简单说明如下:

  • cameras:一个列表,包含多个摄像头的配置。
    • name:- 摄像头的名称,用于标识该摄像头。
    • rtsp_url:摄像头的 RTSPURL,用于获取视频流。可以包括用户名和密码。
    • codec:视频编码格式,通常是 copy 表示直接复制流而不进行重新编码。
    • interval:捕获视频流的时间间隔(单位为秒)。
  • retention_days:视频保留天数,表示视频文件将在系统中保留的天数。
  • concatenation:布尔值,指示是否启用视频片段的连接。
  • concatenation_time:指定连接视频片段的时间点(格式为 HH:MM)。
  • deletion_time:指定删除视频片段的时间点(格式为 HH:MM)。

详细的说明请参考官方文档:https://github.com/cyb3rdoc/onenvr?tab=readme-ov-file#configuration-options

安装

在群晖上以 Docker 方式安装。

在注册表中搜索 onenvr ,选择第一个 cyb3rdoc/onenvr,版本只有一个 latest 版本,双击直接下载。

docker 文件夹中,创建一个新文件夹 onenvr,并在其中建两个子文件夹 configstorage

将前面准备的 config.yaml 文件放入到 config 目录中

文件夹 装载路径 说明
docker/onenvr/config /config 存放设置文件
docker/onenvr/storage /storage 存放录像文件

端口

本地端口不冲突就行,不确定的话可以用命令查一下

1
2
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 容器端口
5334 5000

环境

可变
TZ 设为 Asia/Shanghai
DEBUG 设为 false

命令行安装

如果你熟悉命令行,可能用 docker cli 更快捷

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 新建文件夹 onenvr 和 子目录
mkdir -p /volume1/docker/onenvr/{config,storage}

# 进入 onenvr 目录
cd /volume1/docker/onenvr

# 将 config.yaml 放入 config 目录

# 运行容器
docker run -d \
--restart unless-stopped \
--name onenvr \
--hostname onenvr \
-p 5334:5000 \
-v $(pwd)/config:/config \
-v $(pwd)/storage:/storage \
-e TZ=Asia/Shanghai \
-e DEBUG=false \
cyb3rdoc/onenvr:latest

也可以用 docker-compose 安装,将下面的内容保存为 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
services:
onenvr:
image: cyb3rdoc/onenvr:latest
hostname: onenvr
container_name: onenvr
restart: unless-stopped
ports:
- "5334:5000"
environment:
- TZ=Asia/Shanghai
- DEBUG=false
volumes:
- ./config:/config
- ./storage:/storage

然后执行下面的命令

1
2
3
4
5
6
7
8
9
10
11
# 新建文件夹 onenvr 和 子目录
mkdir -p /volume1/docker/onenvr/{config,storage}

# 进入 onenvr 目录
cd /volume1/docker/onenvr

# 将 docker-compose.yml 放入当前目录
# 将 config.yaml 放入 config 目录

# 一键启动
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:5334 就能看到主界面

lenove,这是我们在 config.yaml 中设定的摄像头名称

点击时间

点击录像文件名

可以回看录像

FileStation 中能找到对应文件名的录像文件

根据我们的设置,前一天的录像会合并成一个文件

而当天的文件,则是 5 分钟一段的

参考文档

cyb3rdoc/onenvr: OneNVR - One Network Video Recorder for All Your Cameras
地址:https://github.com/cyb3rdoc/onenvr

联想C2E摄像头的折腾 | 老苏的blog
地址:https://laosu.tech/2022/12/23/联想C2E摄像头的折腾