2013年1月24日木曜日

スマートウォッチi'm WatchでMJPEGストリームを表示してみた

前回のエントリでi'm Watchを用いてプラレールを操作する方法を紹介しました。今回は、MJPEGをストリーミングするタイプのWifiカメラの映像をi'm Watchで受け取って表示してみます。

いつものプラレールですが、使用例の動画が下記になります。


今回のポイントは、プラレール上のXperia Rayからの映像がMJPEGストリームとして送信され、i'm Watchがそれをデコードして表示している点です。以下で解説するように、動画はBluetoothテザリングで送られてきますので高速にはできず、毎秒5フレーム程度です。

なお、同時にプラレールの操作もi'm Watchで行っていますが、これは前回のエントリに基づいています。

仕組みとサンプルソース

システムの大まかな流れは下の図のようになります。

動画を送信するXperia Rayでは、Google PlayからインストールできるIP Webcamというソフトウェアを導入して実行しています。IPWebcamはサービスとしてバックグラウンドで実行できますので、他のアプリ(ここではBluetoothでPICマイコンに命令を送信するもの)を同時に実行できます。IP Webcamの設定の注意点は以下の通りです。上図で分かるようにデータはBluetoothで送られますので、データ量を減らすことが重要です。
  • Resolution: 320x240に。データ量削減のため
  • Quality: 30~50程度。低いほど画質が下がるが、データ量は減るので有効
  • Orientation: Landscape
  • FPS limit: 5以下に。一秒間に送られる画像の枚数
i'm Watch用の受信アプリですが、MJPEGのデコードに特化したサンプルのソースを
に置きました。このアプリをi'm Watchにインストールして利用します。注意点は以下の通りです。
  • i'm Watchを母艦(上の図ではXperia Ray)と接続し、Xperia Ray側でBluetoothテザリングを有効にします。なお、今回はXperia Rayにはカスタムロムをインストールしています(CM10-based JCROM)。
  • i'm Watch側のアプリから母艦のIPアドレスを指定する必要があります。GUIによる設定画面を用意しましたので、そちらで設定を行います(追記2013.4.30)。なお、androidでBluetoothテザリングを行うと母艦側は192.168.44.1になるようなので、その値を初期値としてあります。
このサンプルを使用しているイメージは下図のようになります。いい感じです。この図では母艦はCM10-based JCROMをインストールしたGalaxy S3です。


おわりに

届いた当初は何に使ったらよいのか途方に暮れたi'm Watchでしたが、adbが入ったファームウェアが公開され、自作アプリを試せるようになると俄然愛着がわきますね。時計としてはまあちょっと残念ですが(毎日充電しなきゃいけないし)。

expansysには色によって在庫があるようなので、気になる人は試してみては?

こちらもどうぞ


0 件のコメント:

コメントを投稿