pistreaming を OpenCV でキャプチャできるようにした

投稿者: | 2020/06/12

Wrote a small but helpful (I hope) video capturing OpenCV framework for pistreaming.

以前、pistreaming というツールを使って監視カメラを作ったことがあります。pistreaming は、性能の高くない Raspberry Pi Zero W 上でも軽快に動作し、ウェブブラウザから閲覧でき、遅延も小さな優れたソフトウェアです。

 

ずっと思っていたのは、このストリーミングを OpenCV で取り込めたら良いのになあ、ということでした。websocat といったツールでストリームをダンプして QuickTime Player 等で開いてみたりしたのですが、なぜかちゃんと開けません。いろいろ苦労した結果、この websocket ストリームは MPEG-1 のフレームバウンダリにきちんと同期して送信されている訳ではないようだ、ということが分かりました。(つまり、websocket で接続しても、ファイル中のでたらめなところから受信してしまう。)

私は MPEG-1 のフォーマットに詳しくないので、Un*x の file コマンドや /etc/magic を参考にしつつ調べたところ、どうも、JSMpeg(JacaScript で書かれた MPEG デコーダ。pistreaming で採用されている)も、ストリームの中からバウンダリを検出して同期し、動作しているようだ、ということがなんとなく分かりました。それが分かれば、あとはツールを書くだけです。

というわけで、pistreaming からのストリームを OpenCV でキャプチャできるフレームワークを書いてみました。本当は、動体検出とかのコードも書いたのですが、稚拙ですので割愛させて頂きます 🙂 。フレームワークは、こちらからダウンロード頂けます。よろしければ御利用ください。

今日はここまで。