本文题图中 NVR logo 由 AI 生成;
简介
什么是 OneNVR ?
OneNVR
是一个简单轻量的网络视频录像机(NVR
),旨在运行于廉价硬件上,例如带有硬盘驱动器的Raspberry Pi
,支持从网络摄像头24/7
录制视频流。用户可以通过本地网页界面浏览录制的文件。
主要特点
- 轻量级设计:专为低成本硬件优化,易于部署。
- 视频流保存:从网络摄像头录制的视频保存为
5
分钟的文件,以防文件损坏导致数据丢失。 - 自动文件处理:每日自动将前一天的视频文件连接为
24
小时的单一文件,并删除过期视频。 - 灵活配置:通过
config.yaml
文件配置,如视频保留天数、合并时间和删除时间等。 - 使用
ffmpeg
:依赖ffmpeg
进行视频流的连接和录制。 - 容器化部署:支持
Docker
部署,易于安装和管理。
应用场合
- 家庭监控:适合家庭用户用于监控家庭安全。
- 小型企业:可用于小型企业的安全监控,成本低廉。
- DIY 项目:适合爱好者和开发者进行自定义监控解决方案。
总之,OneNVR
是一个理想的选择,适合需要简单、低成本视频监控解决方案的用户。
准备
网络摄像头
OneNVR
是个网络视频录像机,所以首先要有用于录像的网络摄像头,其次要知道其接像地址,例如老苏的联想 C2E
# 主流: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
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:摄像头的
RTSP
流URL
,用于获取视频流。可以包括用户名和密码。 - 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
,并在其中建两个子文件夹 config
和 storage
将前面准备的 config.yaml
文件放入到 config
目录中
文件夹 | 装载路径 | 说明 |
---|---|---|
docker/onenvr/config | /config | 存放设置文件 |
docker/onenvr/storage | /storage | 存放录像文件 |
端口
本地端口不冲突就行,不确定的话可以用命令查一下
# 查看端口占用
netstat -tunlp | grep 端口号
本地端口 | 容器端口 |
---|---|
5334 | 5000 |
环境
可变 | 值 |
---|---|
TZ | 设为 Asia/Shanghai |
DEBUG | 设为 false |
命令行安装
如果你熟悉命令行,可能用 docker cli
更快捷
# 新建文件夹 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
文件
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
然后执行下面的命令
# 新建文件夹 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摄像头的折腾