2013年4月10日水曜日

Webカメラ画像のリアルタイム表示


Webカメラの映像をAndroidスマホで表示するデモを何度か受けたことがある。
その際いつも指摘されることが、スマホ側での画像の遅延。

動作環境は以下のようなイメージ。

USBカメラの画像は数秒遅れでAndroid端末に表示される。
ストリーミングソフト=WebCamXPでは3~5秒、YawCamで2秒程度。

USBカメラとAndroid端末が離れている場合は問題ないんですが、デモなどでは絶対指摘されてしまいます。
「この遅れはなんとかならないのか ・・ 」と。

確かにそうなんですよね。
車のバックモニタなどを想定した場合、2~3秒遅延があれば「ゴツン!」間違いなしです。

ストリーミングソフトの自作を想定して、どこまでリアルタイムに近づけるか調べてみた。

USBカメラをDirectShowなどで取り込む場合、取り込みに必要な時間は33mS。
 1/30秒での画像取り込みですね。
 取り込んだ画像サイズは9216154バイト(640*480*3+α:ヘッダ分)でした。

この画像(Bitmap)をメモリ上でjpegに変換した場合(品質40%)
 処理時間に約31mS
 出力画像サイズは25871バイト(原本の約1/35)でした。

 ※ ファイル出力していません。あくまでもメモリ上だけの展開です。

あとはWifiでの転送速度とAndroidの受信~表示の遅れ。
これはJNI(C++)などを使ってがんばるしかないです。

実際には1秒に10枚程度の画像でパラパラ漫画的に、遅延は100mS程度って感じでしょうか。
(これでも2メガBPSの通信速度が必要で、3G回線だととっても無理)。

これで実用レベルに達するなら、DirectShowでの画像取り込み~Jpeg変換~Androidへの転送ってのが実現できそうです。

 MotionJPEGでのパラパラ漫画ストリーミングです。
 最近はやりのストリーミングもリアルタイムには厳しいので ・・

0 件のコメント:

コメントを投稿