高解像度カメラの処理が重い…
いまや高画質のWifi監視カメラが、低価格で売られている時代です。
自宅のセキュリティのために、監視カメラシステムを自作している人も少なくないと思います。
いままでMotionやZoneminderを使ってきましたが、なんというか負荷が重い。
低解像度なカメラであれば十分な動きをするのですが、5MPとかの高解像度のカメラを使うとCPU負荷が半端ない。Raspiだとさらに…。
そして、録画された動画に遅延や音飛びやフレーム落ちも起きるので、困っていました。
組み合わせによる低負荷化
ほとんどの高解像度カメラには、高解像度の動画を送付する「メインストリーム」と、低解像度の動画を送付する「サブストリーム」が備わっています。
前述したMotionやZoneminderは、サブストリームの解析であればRaspiでも余裕があります。
そこで、動体検出はサブストリームで行うこととして、メインストリームを軽負荷で記録できるソフトはないかを探っていました。
そこでたどり着いたのがMoonfire-NVRです。
従来のシステムはなぜ重いか
大体のカメラは、H264で圧縮した動画をひたすら送り付けてきます。
MotionやZoneminderは、動体検出時に録画をするために動画をバッファリングしたりデコードしたり解析したり、というところにCPU/GPU/メモリを食います。重いわけです。
こう見るとConsだけですが、当然Prosはあります。
これらのProsは、なんの動きもない、いわゆる余分な録画を撮らないということです。
イベントを見返すのも楽ですし、記録容量が少なくてすみます。
Moonfire-NVRはなぜ軽いか
一方、Moonfire-NVRは、HDDやSSDなどのストレージにカメラからのデータを垂れ流します。
常時録画をするのでストレージの容量は山ほど食いますが、CPU/GPU/メモリ余分な処理がない分非常に軽量です。
ストレージの容量にものを言わせるアプローチは非常に魅力的です。
例えば、8Mbpsの動画を記録するとして、一日丸っと録画しても100GB行きません。
8Mbps * 3600 sec * 24 hour = 約87GB
今や4TBのHDDは1万円しないので、非力なマシンでも常時高画質録画ができるって話ですね。素晴らしい。
Consは、常時録画ということ。
ただ、前述のとおりサブストリームで動体検出、メインストリームをMoonfire-NVRで録画しておけば大したことはありません。
あと、若いOSSですから機能はまだ限定的です。多分バグもあるでしょう。
それでも、ブラウザから録画一覧を見たり、時間指定してのプレビューができたり、
TUIで設定できたり、導入が簡単だったりと十分な機能を持っています。
導入方法
導入方法は以下を読め、です。
わかんね(^_-)-☆って人は、コメントもらえればある程度支援しますが、
ダウンロードの待ち時間など含めても15分もかかりません。
https://github.com/scottlamb/moonfire-nvr
私はRaspi4にZoneminder+Moonfire-NVRの構成で、3台の5MP監視カメラを管理してます。ロードアベレージも平均2程度なので、すげー軽い。
終わりに
日本語で、Moonfire-NVRの記事が全く見つからなかったので書き起こしました。
興味あれば、一緒にいろいろ試してくれると嬉しいです。