• スポンサードリンク

UsbWebCamera/UsbWebCameraPro/UVCStreamerを更新

といってもベータ版をリリース版にしただけ^^;
1ヶ月ほど寝かせたからもうええやろってことで。
バギーな端末対策はとりあえず放置しろとのさきちゃんの神様の御神託に従うことにしました(*ノω・*)テヘ

UsbWebCamera
UsbWebCameraPro
UVCStreamer

一番大きな変更点はUIで、画面上部にコントロール用のアイコンを並べていたのをやめて、グルグル先生純正のカメラアプリ風な、ナビゲーションドロワーを使ったサイドメニューに変更しています。

これに伴って、従来は表示していなかったカメラコントロール項目のいくつかについても、カメラが対応していれば表示するようになっています。ただし、全てのカメラコントロールがいつでも動くわけではありません。幾つかのバギーなカメラはサポートしていないカメラコントロールを「サポートしている」として返してきますし(この場合はメニューには表示されますが動作しません)、例えば露出時間設定の様に自動露出モードや自動露出優先設定などの他の設定の値に応じて有効無効が変わる設定項目もあります。

従来は、動画保存の際に、MJPEG展開した映像データを直接MediaCodecのエンコーダーへ書き込んでいました。今回からSurfaceを使った動画エンコードを行うための設定項目を追加しました(エキスパート設定内にあります)。
この設定を有効にすると、ミラーモード設定が動画にも適用されます。
ただし、幾つかのバギーな端末ではEGL/OpenGL|ESのシステムライブラリ内にデッドロックするバグがあり、この設定を有効にするとアプリがハングアップする可能性があります。このバグがある端末では、静止画キャプチャ時にもアプリがハングアップする可能性があります。
このバギーな端末向けのワークアラウンドが見つかっていないのでしばらくはβ版としておきます。WebRTCなど他のオープンソースなライブラリ等を見ると色々対策はしているようですが、根本的には解決には至っていないので、どこかで諦めるかもしれませんが。

画面の回転制御設定項目を追加しています。Androidの端末で使用可能な設定値は全て選択できるようになっていますが、端末によっては動作しない項目もあります。Android TVやAndroidベースのカーオーディオ等特殊な回転制御をする端末でも挙動が改善することを期待しています。

UsbWebCameraProではh.264対応のUVC1.1/UVC1.5規格準拠のカメラをサポートしました。h.264に対応しているカメラであれば消費電力や端末の発熱がかなり軽減されます。

内部構造を大きく変更しています。UsbWebCameraProとUVCStreamerでのバックグラウンドモードがかなり安定して動作するようになっています。自分的には「実験的」をとってもいいかなと。それ以外にもカメラのハンドリングを改善しているので従来より速く処理ができるようになっています。

UsbWebCameraとUVCStreamerではインターステーシャル広告を追加しました。1回のアプリ起動で最大1回表示されます(表示されない時もあります)。UVCStreamerのアプリ内課金で「広告なし」にするとインタースティシャル広告も非表示になります。
グルグル先生が、なんでインタースティシャル広告を使わへんねんとたびたびメールを送って来てたのですが、従来のUIでは表示するタイミングがいまいちしっくり来なくて放置していました。今回UI/UXを大きく変えるタイミングで内部の処理も大きく変えたので、合わせてインタースティシャル広告を表示するようにしています。

UsbWebCameraProの価格とUVCStreamerのアプリ内課金アイテムを期間限定で値下げしています。

追記:
すみません、UVCStreamerのYouTube対応は先送りしてしまいました。画面上には表示されますが選択できません。
あと接続方法が変更になっています。接続したい接続設定を選択した時にurlとして正しければ下中央に水色のマークが表示されるのでそれにタッチすると接続開始します。

UsbWebCamera:

  • UIを変更
  • SurfaceEncoderを使用する設定を追加(一部の機種では動作しません)。録画にミラーモードを適用できるようになりました。
  • 幾つかの端末でクラッシュするを修正
  • カメラとの互換性を改善
  • 内部処理の最適化
  • インタースティシャル広告を追加…グルグル先生がなんで使わんねんと言うのでm(__)m
  • その他バグフィックス

UsbWebCameraPro:

  • UIを変更
  • SurfaceEncoderを使用する設定を追加(一部の機種では動作しません)。録画にミラーモードを適用できるようになりました。
  • バックグラウンドモードでハングアップする端末があるのを改善
  • カメラとの互換性を改善
  • h.264に対応のカメラと接続した場合にmjpegの代わりにh.264で映像を取得するための設定を追加。消費電力が削減できます。
  • 内部処理の最適化
  • その他バグフィックス
  • 350円→300円に変更
    いつまでかはわかりませんがそのうち戻します^^;

UVCStreamer:

  • UIを変更
  • SurfaceEncoderを使用する設定を追加(一部の機種では動作しません)。ストリーミングにミラーモードを適用できるようになりました。
  • 幾つかの端末でクラッシュするを修正
  • カメラとの互換性を改善
  • 内部処理の最適化
  • インタースティシャル広告を追加…グルグル先生がなんで使わんねんと言うのでm(__)m
  • その他バグフィックス
  • アプリ内課金を100円ずつ値下げ
    いつまでかはわかりませんが多分そのうち戻します^^;

« »

  • スポンサードリンク

コメント

  • th02 より:

    こんにちは。初めまして。

    作成者様がGitHub公開されているUVCCamera(https://github.com/saki4510t/UVCCamera)についてお聞きしたいことがございます。

    上記GitHubに公開されておりますアプリを使用してみたところなのですが、正常にアプリが動作致しませんでした。
    Logを確認致しましたところ、カメラデバイスのオープンにした失敗したエラーが表示されていました。
    エラーの場所は、UVCCamera.cppのUVCCamera::connectでした。
    エラー値は-1の場合と-50の場合がございました。

    使用したAndroid端末は、Xperia Z5 Compact(SO-02)とAQUOS PAD(SH-05G)です。
    使用したWebカメラはLogicool C615となります。

    どのようにしてエラーを解決できるのかご教示願いますでしょうか。
    よろしくお願い致します。

    • saki より:

      こんにちは。

      ・可能性としてはいくつもあるのですが、ここ最近になってはじめてビルドされたのであれば、NDKがr15(今のAndroid StudioのSDK Managerから自動でインストールするとr15になります)になっている可能性が高いです。NDKr15になるさいにコンパイラ・ヘッダー・C/++Cのランタイムライブラリに色々と大きな変更があり、コンパイルはできますが実行すると必ずconnect時にエラーで失敗します。USB機器へアクセスする際に使用しているlibusbという昔からあるオープンソースのライブラリが使っている機能がNDKr15では必ずエラーを返します。技術的にはその機能を使わないことも可能ですが、そうするとほぼ全部を作り変えることになってしまうので現時点ではNDKr15への対応予定はありません。
      スタンドアロン版のSDKr14bをダウンロード&インストールしてもらって、プロジェクト直下のlocal.propertiesファイルのsdk.dirへSDKr14への絶対パスを設定していただいてクリーンビルドしていただくとNDK由来の不具合は解消します。

      ・端末とカメラの組み合わせによっては、USB2.0のハブを挟まないと動かない機種があります(機器の検出ができない場合も、検出は出来るが接続できない場合の両方があります)

      ・今はほとんどなくなりましたが、品質の悪い(OTG)ケーブル/コネクタだと動かない事があります。

      ・UVCCamera.cppの26行目にある「#if 1」を「#if 0」にして、49行目の「#define LOCAL_DEBUG 0」を「#define LOCAL_DEBUG 1」にしてビルドし直してログを見るとデバッグ用のログが増えるのでもう少し原因がはっきりすると思います。似たようなデバッグ用のマクロ定義は各ファイルに入れてるので必要であれば有効にしていただければと思います。

      よろしくお願いします。

      • th02 より:

        こんにちは。
        早速のご回答ありがとうございます。
        作成者様のご指摘通り、ここ最近になって初めてビルドしたため、NDKのバージョンが15になっておりました。
        ご助言していただいたように、NDKr14bをインストールしプロジェクト直下のlocal.propertiesファイルのndk.dirへNDKr14への絶対パスを設定してデバッグしたところ、正常にカメラのオープンが出来、映像が映りました。
        この度は誠にありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

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