RTSPカメラ用のbashダッシュカム

みなさんこんにちは!



子供はすでに学校に出て自力で卒業する年齢になっているため、訓練スケジュールが壊れている間、モニタリングのタスク、彼の宿題の方法、ピアノと他の教育タスクの所要時間になりました。



しかし、特別なソリューションを購入するお金はあまりないので、サーバールームの瓦throughをかき集めて、管理者の許可を得て、Xblitz iSee P2P IP WiFi IPカメラを家に持ち帰ることにしました。



画像






Xblitz iSee P2P IP WiFiカメラ



ONVIFサポートがカメラで宣言されたため、ZoneMinderをインストールし、それを介してデバイスを制御する必要があるという考えが自動的に促されました。



インストールされましたが、判明したように、このカメラはどの設定でも動作しませんでした。

カメラのWebインターフェースでは、ポーランド市場向けのブランディング前のカメラのメーカーは中国のメーカーnetcam360であることが判明しました。



ウェブカメラインターフェース



画像



実際のメーカーを特定した後、検索エンジンを介して、上記の形式に問題があるだけではないことがわかりました。 そして、指定されたプロトコルで動作するように設定できなかっただけではありません。 どうやら、インターフェイスにONVIFを含めることは、中国のプログラマーからの冗談に過ぎません。



インターフェイスでONVIFを有効にする



画像



RTSPを介してキャプチャすることにしました。 幸いなことに、この方法はうまくいきました。

しかし、systemdでサービスを作成するトピックに興味を持つようになったので、ストリームをキャプチャする単純なbashスクリプトを作成するのではなく、そのようなサービスを作成することにしました。



結局のところ、サービスの記述は非常に簡単な手順です。 / etc / systemd / systemにある「camera @ .service」という簡単なサービスのコードを次に示します。



サービス「カメラ」



[Unit] Description=Camera Service on %I After=network.target [Service] Type=simple KillSignal=HUP User=camera SyslogIdentifier=camera_%i ExecStart=/bin/bash -a -c '</dev/tcp/%i/10554 && source /etc/camera.conf && mkdir -p /home/camera/%i && cd /home/cam era/%i && exec /usr/bin/openRTSP -D 5 -F $DATE -K -4 -P 3600 -l -b 200000 rtsp://%i:10554/udp/av0_0' Restart=always RestartSec=10 #Restart=on-failure [Install] WantedBy=multi-user.target
      
      





ご覧のように、サービスはコマンド「systemctl start camera @ IP-address」によって開始されます。

Linuxサービスの規範に準拠するために作成された/etc/camera.confには1行しかありません。



構成ファイルの内容



 DATE=$(date "+%Y_%m_%d_%H_%M_%S")
      
      





便宜上、このIPの/ etc / hostsに「eye01」を登録しました。

将来的には3台のカメラがあると想定されます。



1時間の記録は約1.5 GBのファイルであるため、古いファイルの削除をcronに追加するだけです。



 find /home/camera/eye01 -mtime +2 -delete
      
      





そして、安全に監視できます。



しかし、数日後、カメラが時々応答を停止し、ビデオが中断されることがわかりました。



また、スクリプトを使用してカメラのcronスキャンを計画し、スラックについて通知し、カメラを再起動する必要がありました。 10〜12時間に1回ハングする可能性があることを経験的に決定しました。 したがって、スケジューラは、カメラが30分ごとに1回書き込むかどうかをチェックします。 半時間の録音を失うことは私にとって重要ではありません。



カメラ検証スクリプト



 #!/bin/bash -e exec 1> >(logger -s -t "$(basename $0) $1") 2>&1 SIZE1=$(du -sb /home/camera/$1 | cut -f1) sleep 5 SIZE2=$(du -sb /home/camera/$1 | cut -f1) if [ $SIZE1 -eq $SIZE2 ] then echo "Size of $1 is not increasing, probably not recording" if [ ! -f /tmp/$1 ] then touch /tmp/$1 /usr/local/bin/slackcat -n beholder "Size of $1 is not increasing, probably not recording. Rebooting." /usr/local/bin/reboot_camera.sh $1 fi exit 1 else echo "Size of $1 is increasing, probably recording" if [ -f /tmp/$1 ] then rm -f /tmp/$1 /usr/local/bin/slackcat -n beholder "Size of $1 is increasing, probably recording" fi exit 0 fi
      
      





カメラ再起動スクリプト



 #!/bin/bash exec 1> >(logger -s -t "$(basename $0) $1") 2>&1 if [ "$1" == "eye01" ]; then curl "http://$1/reboot.cgi?loginuse=admin&loginpas=PASSWORD" elif [ "$1" == "eye02" ]; then curl "http://$1/reboot.cgi?loginuse=admin&loginpas=PASSWORD" elif [ "$1" == "eye03" ]; then curl "http://$1/reboot.cgi?loginuse=admin&loginpas=PASSWORD" else echo "Not recognized camera $1" exit 1 fi
      
      





実際にはすべて。 ビデオ監視を迅速かつ安価に組織するという私の決定を他の誰かが助けてくれることを願っています。



その改善のための批判や提案に感謝します。



使用されるリンクと出版物



リポジトリ

SlackcatとのSlackの統合

systemdサービスの作成方法



ご清聴ありがとうございました。



All Articles