Android でカメラアプリを作ろうとすると、エミュレータでは映像を出してくれないので、実機で動作確認する必要があった。が、実機を使わずに開発できるようにWebカメラの映像を使う方法がある。
以前、NyARToolkit を試そうとしたのだけど、うまくビルドできなかったのであきらめていた。
しかし、最近またこちらの記事を目にしたので、久しぶりにトライしてみることにした。
今回はうまくいった、が、いくつかハマッタのでメモしとく。
- Debug certificate expired とでてビルドできない
一年以上ぶりに Eclipse を立ち上げたら、Hello World すらビルドできない。なんでだろうと思ってコンソールの出力を見てみたら上記のメッセージが出ていた。
ググッてトップに出ていたこちらを参考にして直す。
Windows - Preference の Android - build にある Default debug keystore のファイルを削除して、Project - Clean すれば良いらしい。で、書いてあるとおり、エミュレータでデバッグしようとしても
Re-installation failed due to different application signatures
You must perform a full uninstall of the application.
Please execute 'adb uninstall org.example.hello' in a shell.
と出るので、アンインストールしてあげる。sdk の tools の下に行って、書いてある通りのコマンドを叩けばいい。
- WebcamBroadcaster が動かなかった
SDK と JMF のパスを設定したにも関わらず、カメラの画像が取得できない。
Unable to find a suitable player というエラーがでている。
元となっている下記に行くと、コメントに解決方法が出ていた。
JMF についてくる JMStudio.exe で、File - Preference - Capture を見ると、カメラデバイスが認識されていない。 Detect Capture Device をすると検出された。
http で 9889 port にアクセスすると、カメラ画像がブラウザに表示された。
- エミュレータの画像が真っ黒
SocketCamera.java を利用するために、このファイルがあるフォルダをビルドパスに追加する。プロジェクトを右クリックして、Build Path - Configure Build Path から Source タブの Link Source で、lib のパスとフォルダ名 lib を設定する。
SocketCamera を使うように ApiDemo の CameraCapture.java のソースを修正。
さて、これで動くはず……と思ったら画面が真っ黒。SocketCamera.java の中のIPアドレスを変更するのを忘れていました。
ちなみに、AndroidManifesto.xml で
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
も有効になっている必要があるそうです。