シングルボードコンピュータでAgent DVRを動かしてNVRサーバにする 後編

もしもOrange Pi Zero 2にハードディスクをつないだら・・・

前回、シングルボードコンピューターのOrange Pi Zero 2用にAgent DVRのビルド+インストールとカメラの登録を行った。今回はその続きで映像データ保存用のストレージの用意と登録。

廉価な小型低性能のシングルボードコンピュータにはSATAなどのハードディスクを接続する端子が無いことが多い。NVRサーバでカメラの映像を録画する場合、NFSなどで別のホストに録画データを保存する方法もありますが、それならそもそもシングルボードコンピュータをNVRサーバにするまでもなくそのホストをNVRサーバにすれば良さそう。今回は、シングルボードコンピュータのUSB端子に外部HDDを接続し録画データを保存する。

Amazon商品画像
センチュリー スライディング裸族 SATA6G CSDRU3B6G

販売価格: 4,158 円

(2023年01月02日 6:00時点の参考価格)

SATA接続タイプのSSDや2.5インチHDDを接続する場合はUSB1コネクタとSATA+電源の中華アダプタが500円程度から購入できる(正常に動作するかは無保証)。3.5インチHDDはUSBアダプタ単体で駆動させるには電源が不適合なのでHDDスタンドやHDDドックと言われる製品を使うのが無難。上の写真にも写っている「スライディング裸族」は個人的にはとてもオススメ。HDDの縦挿しタイプは軽いHDDだと浮き上がりが発生して接続が不安定になったりHDD背面の基板部分にホコリが溜まることがあるので埃よけが必要だが横スライド挿しの「スライディング裸族」はこれらの欠点が改善されています。SATAは端子部分が3.5インチ2.5インチ共通なので2.5インチHDDでも使えます。でも、スライディング裸族はちょっとお高めかも。

ハードディスクのフォーマットとマウント

HDDスタンドから生えているUSBケーブルをシングルボードコンピュータのUSB端子に接続する。HDDスタンドの電源をオンにする。

# lsusb    USBの接続済みデバイスの確認
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 174c:1053 ASMedia Technology Inc. CSDRU3B6G   何かのデバイスが検知された
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

# ls /dev    デバイスの確認 この例ではsdaがハードディスク
autofs           fuse       loop4         pts             tty    tty22  tty37  tty51  tty9     vcs2   vcsu4
block            gpiochip0  loop5         random          tty0   tty23  tty38  tty52  ttyBT0   vcs3   vcsu5
bsg              gpiochip1  loop6         rfkill          tty1   tty24  tty39  tty53  ttyBT1   vcs4   vcsu6
btrfs-control    hugepages  loop7         rtc             tty10  tty25  tty4   tty54  ttyS0    vcs5   vhci
bus              hwrng      loop-control  rtc0            tty11  tty26  tty40  tty55  ttyS1    vcs6   video0
cec0             i2c-0      mapper        sda             tty12  tty27  tty41  tty56  ttyS2    vcsa   watchdog
char             i2c-1      media0        sg0             tty13  tty28  tty42  tty57  ttyS3    vcsa1  watchdog0
console          initctl    mem           shm             tty14  tty29  tty43  tty58  ttyS4    vcsa2  wcn_op
core             input      mmcblk1       slog_wcn0       tty15  tty3   tty44  tty59  ttyS5    vcsa3  zero
cpu_dma_latency  kmsg       mmcblk1p1     slog_wcn1       tty16  tty30  tty45  tty6   uhid     vcsa4  zram0
cuse             lirc0      mqueue        snd             tty17  tty31  tty46  tty60  uinput   vcsa5  zram1
disk             log        net           stderr          tty18  tty32  tty47  tty61  uleds    vcsa6  zram2
dri              loop0      null          stdin           tty19  tty33  tty48  tty62  urandom  vcsu
ecryptfs         loop1      ppp           stdout          tty2   tty34  tty49  tty63  v4l      vcsu1
fd               loop2      psaux         sunxi-reg       tty20  tty35  tty5   tty7   vcs      vcsu2
full             loop3      ptmx          sunxi_soc_info  tty21  tty36  tty50  tty8   vcs1     vcsu3

# fdisk -l  既存のパーティションを表示
Disk /dev/mmcblk1: 14.84 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe8ce0794

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk1p1       8192 30801919 30793728 14.7G 83 Linux    ←microSDカードのOSを含むメイン(/ ルート)のファイルシステムのパーティション

メモリディスクなどのパーティションも表示される(省略)

# fdisk /dev/sda    /dev/sdaのハードディスクにパーティションを設定する

Welcome to fdisk (util-linux 2.36.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

The device contains 'isw_raid_member' signature and it will be removed by a write command. See fdisk(8) man page and --wipe option for more details.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x56babc2f.

Command (m for help): p     /dev/sdaハードディスクの既存パーティションを表示
Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: 8AS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x56babc2f


Command (m for help): n     新規パーティションの作成
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p     プライマリを選択
Partition number (1-4, default 1): 改行( or 1)    パーティション番号1を選択
First sector (65535-488397167, default 65535): 改行( or 65535)    最初のセクタ65535を指定
Last sector, +/-sectors or +/-size{K,M,G,T,P} (65535-488397167, default 488397167): 改行( or 488397167)    最後のセクタ488397167を指定

Created a new partition 1 of type 'Linux' and of size 232.9 GiB.
Partition #1 contains a isw_raid_member signature.

Do you want to remove the signature? [Y]es/[N]o: y    よく判らないRAID用署名があったようなので削除させる許可でYを指定

The signature will be removed by a write command.

Command (m for help): p    パーティションを表示して確認
Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: 8AS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x56babc2f

Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1       65535 488397167 488331633 232.9G 83 Linux     パーティションを作成できた

Filesystem/RAID signature on partition 1 will be wiped.

Command (m for help): w    設定したパーティションを保存して終了
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

# mkfs.ext4 /dev/sda1    作成したパーティションをext4でフォーマットする
mke2fs 1.46.2 (28-Feb-2021)
Creating filesystem with 61041454 4k blocks and 15261696 inodes
Filesystem UUID: 67ddf6bd-0959-4b78-a186-efcf6c0af82f
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
        4096000, 7962624, 11239424, 20480000, 23887872

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks):
done
Writing superblocks and filesystem accounting information: done    終了

# fdisk -l    パーティションを表示
Disk /dev/mmcblk1: 14.84 GiB, 15931539456 bytes, 31116288 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe8ce0794

Device         Boot Start      End  Sectors  Size Id Type
/dev/mmcblk1p1       8192 30801919 30793728 14.7G 83 Linux


Disk /dev/zram0: 492.06 MiB, 515960832 bytes, 125967 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/zram1: 50 MiB, 52428800 bytes, 12800 sectors
Units: sectors of 1 * 4096 = 4096 bytes
Sector size (logical/physical): 4096 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes


Disk /dev/sda: 232.89 GiB, 250059350016 bytes, 488397168 sectors
Disk model: 8AS
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 33553920 bytes
Disklabel type: dos
Disk identifier: 0x56babc2f

Device     Boot Start       End   Sectors   Size Id Type
/dev/sda1       65535 488397167 488331633 232.9G 83 Linux

# mkdir /rec    どこでも良いがハードディスクのマウント場所となるディレクトリ /rec を作成

# mount /dev/sda1 /rec    ハードディスクに作成したext4ファイルシステム/dev/sda1 を /rec にマウントする

# df -h    ファイルシステム等のマウント状態を確認する
Filesystem      Size  Used Avail Use% Mounted on
udev            422M     0  422M   0% /dev
tmpfs            99M  840K   98M   1% /run
/dev/mmcblk1p1   15G  3.9G   11G  27% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M  4.0K  5.0M   1% /run/lock
tmpfs           493M     0  493M   0% /tmp
/dev/zram1       49M   28M   18M  61% /var/log
tmpfs            99M     0   99M   0% /run/user/1001
/dev/sda1       229G   28K  217G   1% /rec    マウント完了。これで出来た

今回は手動でハードディスクのマウントを行ったが、設定ファイルに書いた訳ではないのでシステムを再起動するとマウントされない状態になる。
/etc/fstabなどにマウント情報を書き込むというのが普通かと思われますが、USBのリムーバブルディスクを/etc/fstabに書くのは気が引けるので、/etc/rc.localに手動マウントと同じコマンドを書いてシステム起動後に毎回マウントする。exit 0の前の行あたりに /usr/bin/mount /dev/sda1 /rec という1行を挿入する。

# mkdir /rec/agent   これがメイン
# mkdir /rec/archive   これは無くても可かも
# mkdir /rec/images   これは無くても可かも

ハードディスクの /rec 下にサブディレクトリを作成しておく

Agent DVR用ストレージをハードディスクに設定する

シングルボードコンピュータでAgent DVRを使う 18
メイン画面左上のアイコンをクリック。
メニュー画面で「設定」をクリック。

シングルボードコンピュータでAgent DVRを使う 19
設定の右上のドロップダウンから「ストレージ」を選択する。

シングルボードコンピュータでAgent DVRを使う 20
ストレージの設定の「構成、設定」の「 」をクリック。

シングルボードコンピュータでAgent DVRを使う 21
Agent DVRインストール直後の初期Pathが登録されているが、Orange Pi の場合はmicroSDカードの /root 下になっている。当然、microSDカードを映像(動画/画像/音声)の保存先としては使えないのでNFSなどで別ホストのストレージに保存するか、外付けのハードディスクかSSDに保存する。それがこの記事の主題。
常識的には先ず不要なmicroSDカードの/root下というPathを削除したいところだが、このストレージの設定には最低1つのPathが登録されている必要があるらしく、1つしか登録されていない状態でそのPathを削除はさせて貰えない。そこで、先にハードディスクのPathを登録してから/root/・・・のPathを削除するという流れ。
「追加」をクリック。

シングルボードコンピュータでAgent DVRを使う 22
意味のない「確認」画面が表示されるので「OK」をクリック。

シングルボードコンピュータでAgent DVRを使う 23
ストレージの設定画面の一番上の「アドレス」に先に作成したディレクトリ /rec/agent/ を入力する。
「ストレージの管理」の「管理」スイッチをOnにする。
「記録」の「アーカイブの場所」と「画像の場所」に上で作成したサブディレクトリのPathを入力する。(空でも良いかも)
右下の「OK」をクリック。

シングルボードコンピュータでAgent DVRを使う 24
ストレージの画面に戻ると /rec/agent/ が登録されていることが確認できる。これで最初から登録されていたmicroSDカードの保存場所/root/・・・を削除可能になる。「」をクリックで削除する。

シングルボードコンピュータでAgent DVRを使う 25
メイン画面左上のアイコンをクリック。
メニュー画面で「デバイスの編集」(カメラの設定変更)をクリック。

シングルボードコンピュータでAgent DVRを使う 26
登録済みのカメラのリストから変更したいカメラの「」(編集)をクリックする。
複数のカメラを登録済みの場合は全てのカメラを順に設定変更する。(以下)

シングルボードコンピュータでAgent DVRを使う 27カメラの編集画面右上のドロップダウンメニューを「全般的」から「ストレージ」に変更。

シングルボードコンピュータでAgent DVRを使う 28
「位置」と「フォルダ」を適切に設定する。
右下の「OK」をクリック。

複数カメラを登録済みなら全てのカメラで同様に設定変更する。
Agent DVRの設定でカメラ登録より先にストレージの登録をしていれば不要な設定ですが、このようにAgent DVR全体としてのストレージの設定とカメラ別の保存場所の設定があるということを知っておくことは大事。

録画モードの設定

シングルボードコンピュータでAgent DVRを使う 29
カメラの設定ついでに、カメラの編集画面右上のドロップダウンメニューを「全般的」から「検出器」に変更。
検出機能のスイッチを有効(On)にする。
画面内で動く物体を検知する範囲を編集する。初期値は画面全体。一部を検出対象から除外する場合は「」(消しゴム)アイコンを選択して除外したい部分をクリックする。青く塗られている範囲が検出対象のエリアなので勘違いなく。 「検出器」のドロップダウンメニューで初期値の「なし」から「単純」等に変更する。非力なシングルボードの場合は「単純」が無難。単純だと画面内の指定範囲で動きがあれば録画が始まるというシンプルな動作。高性能なPCであればAI系の検出器を使うという選択肢がある。
設定したら右下の「OK」をクリック。

シングルボードコンピュータでAgent DVRを使う 30
設定を確認するために左上の「」(ビデオカメラ)アイコンのドロップダウンメニューから「ライブカメラ」をクリック。
カメラーのプレビュー画面が表示されるので動くものが映るのを待つ。画面内で動きがあったときに右上に が表示されて録画が始まることを確認。(画面内から動くものが消えて暫くして録画が停止することも)

OrangePi Zero 2は非力な部類のシングルボードコンピュータだが1週間ほど動かしてみた感想としては予想外に安定しているというのを先ず挙げたい。そして、以前に超非力なノートPCとWindowsでAgent DVRを動かしたときより遥かに動作が軽め。もちろん高性能なPCには負ける筈だがカメラの台数が少なめであればこれで十分といえる。ネットワーク通信の怪しい中華NVRボードよりは安心して使えるし。ただし、Agent DVRは本格的に使おうとすると有料ライセンスが必要になるので本当に小規模で大人しく使うのでなければ利用継続にはそれなりにお金がかかることになるので注意。Agent DVRのインストール時に(自動)ビルドしたffmpegが遅延少なめで良い感じ。

関連記事:

シングルボードコンピュータでAgent DVRを動かしてNVRサーバにする 前編

シングルボードコンピュータでAgent DVRを使う 1

監視用IPカメラの映像を録画するネットワークビデオレコーダー(NVRサーバ)が欲しかったのだが、日本で普通に製品を購入すると数万円ほどかかるので手が出ない。そこで、中華の安物NVRボードを買ってみた。この中華NVRボードは2,500円(送料込み)という激安なものだが操作はかなり簡単でそれでいてド安定。お値段以上の価値はあると思った。ただし、搭載されているファームウエアのバリアント/ライセンスの問題で機能制限されているのか使い方を理解できていないだけなのかは不明だが、動体検知や顔認識が機能しない。動体検知が無いと24時間(または指定したスケジュールの時間帯)ずっと録画しっ放しになるのでディスク容量の消費が激しくなる。

中華NVRボードを購入する前に少し使ってみたノートPC + Windows + AgentDVRは機能的には満足できるものだったがWindowsのPC1台が常時稼働になる。NVRサーバは動画を処理し続けるので電気代がバカにならない。ノートPCを24時間ブン回しというのはできないというわけではないものの内蔵されている冷却ファンと虚弱な2.5インチハードディスクとバッテリーの劣化が心配。

以前、ADS-B受信用に使っていたOrange Pi Zero 2が空いた。ストレージのmicroSDカードがダメになってシングルボードコンピュータと一緒に別のもの(ROCK Pi S)にリプレイスしたので。
このOrange Pi Zero 2は2020年12月の発売直後に購入した時点では1GBメモリ版が約1,980円(送料約500円)、2022年12月末時点では実売価格3,280円(送料無料)なので3割ほど価格が上がっている。性能は高くないものの消費電力は低めで1GBメモリなのでいろいろ使い途もある。購入時はそれほど気に入ってなかったものの現在は個人的な評価は高め。
このOrange Pi Zero 2をNVRサーバに使用したい。OSは www.orangepi.org からDebian Imageをダウンロードし、microSDカードにイメージを焼きroot:orangepiでログインしただけの素の状態。(Orange Pi 3.0.6 Bullseye with Linux 5.16.17-sun50iw9)
ネットワークは有線LANでDHCPによる自動設定。

シングルボードコンピュータで使えるNVRサーバのソフトウエアの良いのが無いかと探そうとしたのだが、最近のシングルボードコンピュータは結構お高めだし電気も食うしアッチッチだし。ソフトウエアも定番のZoneMinderやShinobiは面白くなさそう。また、シングルボード用として提供されているのがラズパイ用というのも多いよう。
いつからかは知らないがAgentDVRのRaspberryPi向けがその他のシングルボードコンピュータでも利用できそうな造り(パッケージではなくビルドするタイプ)になっていたので試してみた。

Agent DVR / ffmpeg他のビルド

シングルボードコンピュータでAgent DVRを使う 2
ブラウザで https://www.ispyconnect.com/download.aspx を開き、ドロップダウンメニューで「Agent DVR - Linux/ macOS/ RPi」を選択して「Download」ボタンを押す。
ポップアップウィンドウが表示されるので「Run as a terminal」にかかれているコマンド(1行)をコピーしてターミナルで実行する。

# bash <(curl -s "https://raw.githubusercontent.com/ispysoftware/agent-install-scripts/main/v2/install.sh")
No default ffmpeg package option - build from source
Build ffmpeg v5 for Agent DVR (y/n)? y      y以外の選択肢はない筈
Yes
installing build tools
Get:1 http://mirrors.tuna.tsinghua.edu.cn/debian bullseye InRelease [116 kB]
Get:2 http://mirrors.tuna.tsinghua.edu.cn/debian bullseye-updates InRelease [44.1 kB]
Get:3 http://mirrors.tuna.tsinghua.edu.cn/debian bullseye-backports InRelease [49.0 kB]
以下、パッケージのインストールではなくビルドなので時間がかかるのと大量にメッセージが表示される

もう一つ、debuian/Ubuntu系のLinuxでcurlがシステムに入っていないなら先にインストールするように書かれている。ただし、curlが入っていないようなシステムだと他にもいろいろ足りなくてその後のビルドが上手くいかないかも。

2025年11月24日追記:
いつの変更かは不明ですが、最近のバージョンではインストール中のビルドはなくなった模様です。以下のビルドとスワップの部分は読み飛ばしてください。
逆に、libicuパッケージがシステムにインストールされていない場合に、AgentDVRサービスが正常に起動しない問題を抱えていました。これはログを見れば判ることですが、journalctlコマンドを使う習慣がない方は気付けない可能性があります。

$ apt-cache search libicu (インストール可能なlibicu関係のパッケージを探す)
libicu-dev - Development files for International Components for Unicode (これを入れると下も入る)
libicu76 - International Components for Unicode (普通はこれだけで可 バージョンは変わります)
libicu4j-java - Library for Unicode support and internationalization
libicu4j-4.4-java - Library for Unicode support and internationalization

$ sudo apt install libicu-dev (今回はlibicu開発用パッケージセットをインストール)
libicuはAgentDVR実行時に必要なので開発用パッケージをインストールする必要はありません。

メモリが豊富なPCのLinuxなどであれば上のコマンド1行を実行して暫く待てばインストールが完了してサービス起動まで行って貰える。
メモリの少ないシングルボードコンピュータではおそらくcmakeのビルドが永遠に終わらない。このcmakeは、パッケージなどで先にインストールしていてもビルドは行われてしまうみたい。つまりビルドが停まるので次の対処。

大容量の一時スワップの用意

メモリの少ないPCやシングルコンピュータでは先のコマンドを実行する前に8GBほどの大きさで一時的なスワップファイルを作成して利用可能にする。搭載メモリが8GB以下なら「搭載メモリ+スワップで8〜10GB程度」あれば良さそう。

# swapoff -a  現在のスワップを停止
# free -h     空きメモリの確認
               total        used        free      shared  buff/cache   available
Mem:           984Mi       379Mi        53Mi       0.0Ki       550Mi       515Mi
Swap:             0B          0B          0B        スワップが0になっていればOK

# dd if=/dev/zero of=/swap.img bs=1M count=8192  8GBのスワップファイル /swap.img を作成する
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB, 8.0 GiB) copied, 604.02 s, 14.2 MB/s

# mkswap /swap.img    作成した /swap.img をスワップとして設定する(次に再起動するまで)
mkswap: /swap.img: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 8 GiB (8589930496 bytes)
no label, UUID=52e7d3ba-c9a1-496b-b275-e0876136d14b

# swapon /swap.img    /swap.imgをスワップとして使用開始
swapon: /swap.img: insecure permissions 0644, 0600 suggested.

# free -h    空きメモリを確認して8GBのスワップが認識された状態であることを確認
               total        used        free      shared  buff/cache   available
Mem:           984Mi       388Mi        43Mi       0.0Ki       552Mi       506Mi
Swap:          8.0Gi          0B       8.0Gi

もしも上で作成したスワップが使えないなら以下2行のようにパーミッションを変更してから再度スワップの使用を開始する
# chmod 600 /swap.img  パーミッションを設定する
# swapon /swap.img    /swap.imgをスワップとして使用開始(再度)

このスワップファイルは一時利用なので次にシステムを再起動したらスワップとしては無効状態になる。作成した/swap.imgは残っているので再利用もできるが、通常スワップが利用できれば十分な筈なので、/swap.imgは削除するのが良さそう。

再度、Agent DVRのビルドコマンドを実行する。それなりに時間はかかるが、このビルドコマンドは面倒見の良いもののようで、おそらく正常にビルドが完了してサービスの登録/有効化/開始まで行ってくれる筈。
つまり、あとはAgent DVRを操作するだけ。

Agent DVRの操作 カメラの登録

シングルボードコンピュータでAgent DVRを使う 3
Agent DVRをインストールしたのが高性能なLinux PCでデスクトップ環境が使えるものであればブラウザで http://localhost:8090/ を開く。
Agent DVRをインストールしたのが非力なPCやシングルボードコンピュータであれば同じLANの別のPC等のブラウザで Agent DVRをインストールしたコンピュータのIPアドレスとポート8090を指定して開く。
(例: http://192.168.2.16:8090/ )
始めて開いたときにはヘルプのポップアップウィンドウが開く。「OKをクリック」

シングルボードコンピュータでAgent DVRを使う 4
言語の選択ウィンドウが開くのでドロップダウンメニュー(初期値: English)で「日本語」を選択して「OKをクリック」

シングルボードコンピュータでAgent DVRを使う 5
再度ヘルプのポップアップウィンドゥが開くが、今度は日本語で表示される。「OKをクリック」

シングルボードコンピュータでAgent DVRを使う 6
カメラが未登録なので画面の殆どがブランクの画面になる。
左上のアイコンをクリック。

シングルボードコンピュータでAgent DVRを使う 7
メニューが開く。今回は先にカメラを登録するので「新しいデバイス」をクリック。
Agent DVRに慣れているなら先に「構成」の「設定」で必要に応じて適切な指定を行ってからカメラを登録する方が手間が少ないかも。

シングルボードコンピュータでAgent DVRを使う 8
ディスプレイスロットを選択という意味のわからない(かもしれない)画面が表示されるので、右上の をクリック。

シングルボードコンピュータでAgent DVRを使う 9
おそらく通常であれば「IPカメラウィザード」をクリックするものだと思われます。
しかし、ONVIF対応の監視カメラであれば「ONVIF」をクリックする方が早そう。

シングルボードコンピュータでAgent DVRを使う 10
Camera1(仮)の設定画面になります。最初は右上の水色のドロップダウンメニューが「全般的」の筈。カメラの名前が気に入らなければ、この「全般的」の画面で「名前」欄を変更。
「ソースの種類」は「ONVIF」のまま変更しないで、右端の「」をクリック。

シングルボードコンピュータでAgent DVRを使う 11
「構成、設定」のポップアップウィンドウが開くので「検出に記録」(動体検出から指定時間録画)をオンにしたり「生の記録」(カメラ映像そのまま録画)のスイッチを変更したりしてから「OK」をクリック。これらは後からも変更できるので触らず「OK」も可。

シングルボードコンピュータでAgent DVRを使う 12
Agent DVRと同じネットワークにあるONVIF対応カメラが検出されて「利用可能」(クリックして選択)にボタンとして表示される。ボタンにOnvif情報のURLがIPアドレス込みで表示されるので複数カメラが検出されても設定したいカメラを識別できる筈。設定したいカメラのボタンをクリックする。

シングルボードコンピュータでAgent DVRを使う 13
上でクリックしたカメラのOnvif情報のURLが「サービスURL」欄に入る。
「発見する」の「ビデオURLを取得する」ボタンをクリックする。

シングルボードコンピュータでAgent DVRを使う 14
Onvif情報に含まれるストリームURLが認識されて「見つかったオプション」に表示される。おそらく複数検知される筈。
「ライブURL」と「記録URL」でその検知されたストリームを選択できる。
ライブURLはリアルタイム表示用のストリームでカメラが1つでAgentDVRのホストがある程度高性能であれば高解像度のストリームでも良さそうだが、そうでなければ低解像度なストリームを選択する。
記録URLは録画用のストリームで基本的には高解像度のストリームを選択する。映像のディテールなんか不要でぼんやり認識できれば良いということであれば低解像度のストリームを選択する方が良いという考え方もある。
設定が終わったら右下の「OK」をクリック。

シングルボードコンピュータでAgent DVRを使う 15
「全般的」画面に戻るので、「名前」の下の有効/無効スイッチが「On」(有効)になっていることを確認。なっていなければスイッチをクリックして「On」にする。
右下の「OK」をクリック。

シングルボードコンピュータでAgent DVRを使う 16
設定画面で「OK」をクリックしてメイン画面に戻る。少し待たされて設定したカメラの映像が表示されればOK。
設定したカメラがAgent DVR以外のデバイス(スマホ/PC/他のNVRサーバ)に映像を送っていた場合は待ち続けても映像が表示されない(かもしれない)のでカメラの電源を入れ直して暫く待つ。

シングルボードコンピュータでAgent DVRを使う 17
カメラの映像が表示された。
今回使用した監視カメラは映像の右上に時刻を映像に打ってくれる(映像に書き込まれる)。Agent DVRは映像の左上に時刻を書き込む。
この画面ではAgent DVRの時刻が9時間遅れの夜中の2時半になっている。Agent DVRにはタイムゾーンの設定は無いよう。(見つけられなかった)
Agent DVRはそれが稼働しているホストのローカル時間を使用するっぽい。

$ date
Thu 29 Dec 2022 11:38:05 AM UTC
$ sudo timedatectl set-timezone Asia/Tokyo
$ date
Thu 29 Dec 2022 08:38:48 PM JST

dateコマンドで時刻を表示して黄色字の部分(実際は黄色ではない)がUTCだと日本時間とは9時間ズレている。
タイムゾーンをAsia/Tokyoに設定するとローカル時間が日本時間になる。以後、システムを再起動してもこの設定が有効。
改めてdateコマンドで時刻を表示すると黄色字の部分(実際は黄色ではない)がJSTになっている筈。これでローカル時間が日本時間になるので正しい時刻になる筈。
これで、以後AgentDVRの時刻も正しくなる筈。(念の為にAgentDVRを再起動するのが良いかも)
なお、時刻合わせはインターネットに接続されていればビルトインのchronyが自動で行ってくれるので簡単。インターネットと通信できないネットワークに置くなら/etc/chrony/chrony.confの最初の方にあるpool 2.debian.pool.ntp.org iburstの行頭に#を付けて無効にする。
/etc/chrony/sources.d/local-ntp-server.sources (新規作成ファイル)に server 192.0.2.1 iburst のような1行を書く。この例では192.0.2.1がLAN内で接続可能なNTPサーバとする。
sudo systemctl restart chrony でchronyサービスを再起動させて設定を有効にする。

大容量ストレージを備えたPCにAgent DVRを入れた場合は既に録画可能。録画されないようなら左下から3番めの○アイコンをクリックすれば録画が始まる筈。
ストレージの容量が少ないシングルボードコンピュータでは録画用のストレージの設定が無効になっていて録画できないかも。
次回はシングルボードコンピュータにハードディスクを接続し、ストレージの設定を行い録画できるようにする。

関連記事:
Up