はじめに
Amazon で買ったWiFi 付きの IPCamera を Raspberry Pi から操作(録画、3G回線経由で nginx への中継、etc)をしています。
IPCamera の rtsp server をインターネットに直接晒すのではなく、IPCamera は RPi 上の LAN に隔離して、逆に Internet 上の Nginx に movie を push するようなトポロジで IPCamera を乗っ取られるリスクを下げるのが目的です
具体的には こんな 事をやってます
カメラの設定に Python Client for ONVIF Cameraが便利でしたので、その旨ご報告させていただきます次第です
install
READMEを見ると pip と git clone & setup.py が紹介されていますが、私の場合、pip install だとなぜか devicemgmt.wsdl がインストールされませんでした(なんでだろ)
git clone & setup.py だと devicemgmt.wsdl も無事にインストールされました
git clone git@github.com:quatanium/python-onvif.git
cd python-onvif && python setup.py install
サンプルプログラム
READMEに、カメラの時刻情報を取得したり設定したりする例がでています。
ネットワークカメラの時刻設定なんて、NTP で勝手にやってくれるのにその設定なんて現実にすることあるの?と、賢明な諸兄諸姉はお考えになるかもしれません
はじめに、でも書いたとおり IPCAM がインターネットに直に繋げず、RPi を AP として繋げ、IPCAM からのパケットは RPi でブロックする代わりに RPi から外に
IPCAM の Video Source -> RPi の ffmpeg -> Nginx RTSP reverse proxy
とすると外部から IPCAM への侵入が遮断できて少し安心です
その代わりに、IPCAM の NTP client が時刻情報をとれず、時計が狂うので、このサンプルは私の場合は実用的でございました
pros
onvif を含めて SOAP って全く簡単なサービスの呼び出しだけでも xml を用意しないといけないのがお役所の窓口みたいで鬱陶しくて嫌だというか、なんで今時 json じゃなくて SOAP なんだと腹が立ったりもするのですが、このライブラリはなんと!例えば
time_params = mycam.devicemgmt.create_type('SetSystemDateAndTime')
みたいにすると、サービス(ここでは SetSystemDateAndTime)を呼び出すのに必要なパラメタの xml のひな形を全部用意してくれるので凄く嬉しいです!ナントイフホガラカサ!
カメラ設定の例
KNEWMART のONVIF720HD IP Camera で、ONVIF の 5.5.5 Modify a video encoder configuration をやってみた例などを、自分の為の簡単なメモで恐縮ではございますが
こちら残させて頂きましたので、僭越ではございますが僥倖にも諸兄諸姉のご参考になる事がございましたら至福の至りです。
この例の中で onvif のアカウントが、一般に良くないとされるデフォルトのままなので良識に富まれた諸兄諸姉におかれましてはギョッとされますかもしれませんが、我が家のIPCAMは前述のとおりRPi を挟んでインターネットからのコマンドを遮断してますのでご安心していただければ幸いでございます ^^/