UnityのAndroid向けビルドでUVC機器からの映像をUnityのTextureとして使うためのプラグインプロジェクトをGitHubで公開したぞい?
UVC4UnityAndroid
特徴:
- UVC 1.0/1.1だけではなくUVC1.5にも対応してるよ、THEAT SやTHETA VはUVC1.5じゃないとH.264を使用できないからね
- なんとH.264, MJPEG, YUVに対応しているよ
- H.264ではMediaCodecのデコーダーで展開してUnityのTextureへ書き込むからそこそこ低負荷だよ。でもH.264はカメラ側でのエンコード&端末側でのデコードでの遅延がそこそこあるから低遅延が必要ならMJPEGにしてな。
- THEAT Sからの1920×1080@H.264,30fspやTHETA Vからの3840×1920@H.264,30fpsはもちろん、C920r, C922, C930eからのH.264映像も取得できるよ。THETA Z1は誰かが贈ってくれたら検証するぞ
- armeabi-v7a, arm64-v8a, x86 and x86_64に対応しているよ。まぁx86, x86_64はもうお先真っ暗な気がするけど一応しばらくは。IL2CPPでも動くはずだけど、検証したのが少し前だから今はどうかは知らんで。ちなみにバックエンドライブラリからの対応解像度をJSON文字列として取得しているのc#側でSystem.Text.Json使って解析しているんだけど、通常のデシリアライズ方法だとIL2CPPのときにどうしてもうまく行かなかったので変な実装になってるけど気にするんじゃないよ(なんか設定があるのかもしれないけどJson.NETでもIL2CPPだと動かせなかった)。
- 複数のUVC機器からの映像を同時に取得できるよ。USBの帯域はもちろん端末の性能や電流供給能力、映像フォーマット等によって同時に使用可能なUVC機器の数は違うし解像度やフレームレートが制限を受けることもあるから動くかどうかはちゃんと確かめるんだぞ。
- サンプルとしていくつかシーンを作っておいたからREADME.mdを参考にして動かしてみてくれな。
- UVC規格でのカメラ制御機能(コントラスト・シャープネス・輝度やシャッター設定等)は未実装だよ、気が向いたら実装するかも。
- 以前の記事にも書いたけどターゲットAPI>=28のアプリにするとAndroid 10では動作しない(Android10のバグでUSBアクセスのパーミッションを取得できない)ので注意だよ、でもGoogle PlayはターゲットAPI>=28でないとアップロードできないんだよね(´・ω・`)
- これも以前の記事に書いたと思うけど、バックエンドライブラリ自体はUSB2とUSB3に対応しているんだけど、USB3だと端末とUVC機器の組み合わせによって動かないことが多いのでできる限りUSB2での接続がおすすめだよ。
- オレオレバックエンドライブラリを使っているからlibusb+libuvcに比べてMJPEGの場合で1.5-2倍強高速だよ、まぁ1080pだと45fpsぐらいが限界な端末が多いので期待し過ぎはだめだけどね。