Python製の仮想IPカメラ「IPyCam」がGitHubで公開されている。開発者のOliver Hamilton氏(Intel所属)が開発したもので、ONVIF準拠のWS-Discovery、RTSP配信、PTZ制御を実装している。
IPyCamは、実際のIPカメラをシミュレートする純Python実装のソフトウェアだ。物理的なカメラハードウェアなしで、Webカメラや動画ファイル、生成されたコンテンツなど、任意のフレームソースからRTSPストリームを配信できる。
ONVIFは、IPカメラとビデオ管理システム(VMS)間の相互運用性を保証する業界標準プロトコルだ。IPyCamはONVIF準拠のため、多くの商用VMSソフトウェアから通常のIPカメラとして認識される。WS-Discovery機能により、ネットワーク上で自動検出も可能だ。
RTSP配信にはgo2rtcを使用する。go2rtcは外部プログラムとして別途起動し、高性能なビデオストリーミングを担当する。IPyCam側はWebインターフェース、ONVIFメッセージ処理、PTZ制御を実装している。
ハードウェアアクセラレーションを自動検出する。NVIDIA GPU(NVENC)、Intel Quick Sync Video(QSV)、CPUエンコード(libx264)の順に試行し、最適な方式を自動選択する。
PTZ機能はデジタル実装だ。物理的な可動部はないが、入力フレームに対して仮想的なパン、チルト、ズーム操作を適用する。プリセット位置の保存にも対応し、ONVIFプロトコル経由でVMSソフトウェアから制御できる。
インストールは「pip install git+https://github.com/olkham/IPyCam.git」で可能だ。モジュールとして実行する場合は「python -m ipycam」で起動する。
Webインターフェースはhttp://localhost:8080/、メインストリームはrtsp://localhost:8554/video_mainでアクセスできる。
設定はcamera_config.jsonファイルで管理する。カメラ名、解像度(デフォルト1920×1080、30fps)、サブ解像度(640×360)、ビットレート、ハードウェアアクセラレーション方式などを指定できる。
PTZ制御はONVIF経由またはPython APIから直接操作できる。continuous_moveメソッドで連続移動、stopメソッドで停止、goto_presetメソッドでプリセット位置への移動が可能だ。
実用的な用途としては、VMS開発時のテスト、カメラ購入前の互換性確認、複数カメラのシミュレーション、カスタム映像処理パイプラインの構築などが考えられる。Webカメラだけでなく、スクリーンキャプチャやCGレンダリング、センサーデータの可視化など、任意の映像ソースをIPカメラとして配信できる。
プロジェクトはMITライセンスで公開されており、Python、NumPy、OpenCVで構築されている。go2rtcへの依存以外は純Python実装で、拡張性とメンテナンス性が高い設計となっている。