Python
ONVIF

Python Client for ONVIF Camera のご紹介

はじめに

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 を挟んで外部と遮断してますのでご安心していただければ幸いでございます ^^/