• スポンサードリンク

AndroidにUSBでカメラを繋ぎた〜い(^o^)/〜その1

Android Camera NDK USB

スマホとかタブレットにUSBのWebCameraを繋ぎたいと思った事ありませんか?内蔵のカメラだと画面見ながら好きな方向に向けたり出来ないし。
でも公式にはAndroid3.1以降でUSBのキーボードとかマウスに対応しているだけでUSB WebCameraには対応していません。
Androidを核はLinuxなのでもちろんroot取ったりカーネルにデバイスドライバ組み込んだりすれば出来るんですけど、non-rootedでカメラ繋ぎたい。って事で、昔試してダメだったのを再挑戦してみました。
それなりに苦労したものの、動くようになったので公開します。

確認したのはNexus2012(Android4.4.2) & SC-06D(Android4.1.2)と、LogicoolのWebCamera C-910(1000万画素) & ElecomのUCAM0DLY300TA(300万画素)の組み合わせ。USBホスト機能の入っていないAndroid2.xでは動きません。Android3.1以降とUVC WebCameraの組み合わせなら動く可能性が高いとは思いますが、でも公式には出来ないことになっているし、色々とトリッキーなのでグルグル先生次第でいつ動かなくなるかもわからないので自己責任でお願いします。ちなみにAndroid3.x台は手持ちに無くて確認出来ないので一応4.x以降対応という事にします。

解決すべき課題

Android3.1以降の機種でnon-rooted AndroidでUSB Web Cameraへアクセスする際の問題点は、

  1. UVC(USB Video Class)対応のドライバが入っていない(普通のLinuxなら最近はドライバが入っているのでUSB WebCameraなんて楽ちんで使えますけどね)
  2. non-rootedだとNative CodeからUSBデバイスファイルにアクセスするパーミッションを設定・取得出来ない
  3. ユーザー空間からのアクセスなのでisochoronus転送に追随出来るだけの処理速度を確保できるか

の3つが大きな課題になります。ちなみに、Android3.1よりも前ではUSBホスト機能が入ってないので基本的にはrootを取らないとダメですので対象外です。

開発方針

  1. のドライバの件は、ユーザー空間からUSBデバイスとアクセするするためのライブラリlibusb(LGPLv3)と、libusbを使ってUVCデバイスとのアクセスをするためのライブラリlibuvc(BSD License)を使って頑張ります。それなりに手を加えないとダメでしたが、先輩たちに感謝。更にlibuvcのMJPEG対応用にlibjpeg(LGPLv2)を組み込むと・・・AndroidはApache License v2なのでオープンソースライセンスのオンパレードですね。閑話休題。
  2. のパーミッションの件は、rootがあれば解決する・・・と言うかroot取れるならドライバを組み込んでしまえば良い話なのですが、あくまでもnon-rootedで頑張ります。
    グルグル先生に聞いたところでは、Java側でパーミッションを取得してからファイルディスクリプタをNative側へ渡せばなんとかなりそう、ということです。
  3. はNDKやらGPU(shader/RenderScript)やら何やらを駆使して…

ということで、いざ・・・やっぱりだめだったぁ(´・ω・`)。以前確かめた時と一緒でした。簡単に出来るならいっぱい出回っているよなぁ(-_-;)
でも、クラッシュダンプを解析したり色々調べていると、なんか行けそうって感じでしばらくだいぶ頑張ると・・・出来たぁ〜\(^o^)/

実装

まずは、Java側から。USBデバイスの接続をモニターしたりパーミッションを要求したりopen/closeしたりをカプセル化したクラスを作りました。
こんな感じになります。

いきなり長げ〜。でも、USBデバイスへのアクセスはほぼこのクラスで完結です。

使い方は、こんな感じに生成して#registerを呼び出すと、USBデバイスの接続に応じてイベントが飛んでくるのでそこでゴニョゴニョして、使い終わったら#unregisterを呼び出すだけ。

長いの今回はここでおしまい。えっ物足りない?次回をお楽しみにね。
お疲れ様でした。

« »

  • スポンサードリンク

コメント

  • Jane より:

    I aam sude this paragraphh hhas touchned aall the internjet users, itts reallly reslly
    gpod paragvraph oon bbuilding uup neww blog. I've beenn surfing online greatr thwn thjree houres today, butt I neer found
    aany interesting argicle lik yours. It is retty price enoug for me.
    In myy opinion, if alll site ownjers andd loggers mazde jusst right conttent aas youu did,
    tthe neet will likmely bbe much mlre useful thn evwr
    before. Hello! I could habe sworfn I’ve bern tto this blog
    before bbut fter browseing throuigh soome oof the postss I realixed
    it’s new too me. Anyhow, I’m certinly pleassd I discovere itt aand I’ll bbe bookmarking itt aand checkimg bwck frequently!
    http://foxnews.org

%d人のブロガーが「いいね」をつけました。