1 ポイント 投稿者 GN⁺ 2023-09-23 | 1件のコメント | WhatsAppで共有
  • Android 14では、PC用ウェブカメラのために別アプリを使う流れを減らし、OSレベルで USBウェブカメラモード を提供できるようになった
  • 新しい USB Preferences オプションにより、デバイスを UVC(USB Video Class) モードに切り替え、Windows、macOS、Linux PC が標準 USB ウェブカメラとして認識できる
  • ただし機能は自動では有効にならず、カーネル設定、UVC 構成、USB HAL の更新、Webcam Service システムアプリがそろう必要がある
  • Webcam Service は Camera2 API のフレームを /dev/video ノードに渡し、ユーザーは通知からプレビュー・ズーム・レンズ切り替えを操作できる
  • Android 14 に更新されたデバイスでも、古いカーネルや HAL の制約があると対象外になる可能性があり、実際の対応可否はメーカー実装に左右される

Android 14のUSBウェブカメラモード

  • Android 14から、スマートフォンをPC用ウェブカメラとして使う機能が Android OS 自体に組み込まれる可能性がある
  • COVID期には Zoom や Google Meet のようなビデオ会議プラットフォームの利用が増えたが、良いウェブカメラは手に入りにくいか高価で、ノートPC内蔵ウェブカメラの画質にも限界があった
  • スマートフォンのカメラは多くのウェブカメラより画質が良いため、これまでは多くのユーザーが サードパーティ製ソフトウェア でスマートフォンをウェブカメラのように使っていた
  • Android 14では USB Preferences に USB webcam オプションが表示される場合がある
    • 従来の USB モードにはファイル転送/Android Auto(MTP)、USB テザリング(NCM)、MIDI、PTP などがある
    • USB webcam を選ぶと、デバイスが対応している場合は USB モードが UVC に切り替わる
    • 接続先の Windows、macOS、Linux PC は Android デバイスを標準 USB ウェブカメラとして認識する
    • 他の Android デバイスでも利用できる可能性がある

機能の有効化に必要な条件

  • Android 14のウェブカメラ対応は、デフォルトで有効になる機能ではない
  • 実際に動作させるには4つの条件が必要
    • Linux カーネル設定の有効化
    • UVC gadget の構成
    • USB HAL の更新
    • 新しいシステムアプリのプリインストール

カーネル設定の要件

  • 必要な Linux カーネル設定は CONFIG_USB_CONFIGFS_F_UVC
  • この設定は、Android デバイスを UVC gadget としてマウントできるようにするために必要
  • Android 14にアップグレードされる多くのデバイスと、Android 14で発売されるほぼすべてのデバイスは、この設定が有効なカーネルを持つ可能性が高い
    • Generic Kernel Image(GKI) では android12-5.10 からこの設定がデフォルトで有効
    • Android 12以降で発売され、Linux kernel 5.10以上を使うデバイスは GKI カーネルを搭載する必要がある
  • Android エコシステムではメジャーカーネルバージョンの更新がまれで、Google Requirements Freeze(GRF) プログラムによって古いベンダー実装でも認証可能なため、一部の Android 14 アップグレード端末は USB ウェブカメラ機能をサポートできない可能性がある
  • 対応可否は、カーネルバージョンと設定の有効化状況を確認するのが最も直接的
    • カーネルバージョンの確認:
      • adb shell "cat /proc/version"
    • カーネル設定の確認:
      • adb shell "zcat /proc/config.gz | grep 'CONFIG_USB_CONFIGFS_F_UVC'"
  • 例として、Android 13を実行する Galaxy Z Fold 5 は android13-5.15 GKI を使用し、CONFIG_USB_CONFIGFS_F_UVC=y があるため、Android 14 にアップグレードされた際に他の前提条件も満たせば USB ウェブカメラ機能をサポートできる

Webcam Serviceシステムアプリ

  • 一部の Pixel デバイス向け Android 14 QPR1 ベータには、Webcam Service という新しいシステムアプリが含まれる
    • パッケージ名は com.android.deviceaswebcam
    • libjni_deviceAsWebcam.so 共有ライブラリに依存する
    • このアプリとライブラリは、Android 14 の今後予定されているソースコードリリースに含まれる予定
  • Webcam Service アプリは、Android デバイスをウェブカメラに変える DeviceAsWebcam サービスを実装する
  • このサービスは、ホストデバイスが読み取れる /dev/video ノードにカメラフレームを渡す
  • SELinux policy によると、/dev/video ノードには device_as_webcam ドメインのプロセスだけがアクセスできる
    • 実際にアクセスする主体は Webcam Service システムアプリのみ
    • したがって、Android 14 のネイティブ USB ウェブカメラ対応はデバイスメーカーが活用できるが、サードパーティアプリが直接利用することはできない

USBウェブカメラの開始方法とユーザー制御

  • USB Preferences で新しい USB webcam オプションが有効になると、システムは android.hardware.usb.action.USB_STATE インテントをブロードキャストする
    • インテントには connecteduvc の extras が含まれる
  • Webcam Service はこのインテントを受け取る receiver を持つ
    • uvc extra が true に設定されている
    • android.hardware.usb#isUvcSupportEnabled() フレームワークメソッドが true を返す
    • この2条件がそろうとシステムサービスを開始する
  • isUvcSupportEnabled() は、システムプロパティ ro.usb.uvc.enabledtrue のとき true を返す
    • このプロパティは OEM がビルド時に設定する必要がある
    • 設定されていない場合、USB Preferences に USB webcam オプションは表示されず、Webcam Service も開始されない
    • このプロパティは Settings や Webcam Service のようなシステムアプリだけが読み取れる
  • Webcam Service が開始されると、ユーザーがウェブカメラを設定できる新しい通知が表示される
    • 通知をタップするとカメラプレビューが開く
    • ユーザーはズームイン/ズームアウトやレンズ切り替えができる
  • 内部的には、Webcam Service アプリはシステムに終了されないよう foreground service を開始する
  • Camera2 API を使い、720p(1280×720) または 1080p(1920×1080) のストリーミングをサポートする
  • 接続先ホストにはウェブカメラのデバイス名が Android Webcam として表示される

ConfigFSとUSB HAL

  • ホストに表示される名前、動画パラメータ、正確なエンコード方式は、デバイスメーカーが configfs で UVC gadget をどう構成するかによって変わる
  • Tensor ベースの Pixel デバイスでは、Google の UVC gadget function 構成が /vendor/etc/init/hw 内の init.gs[101|201].usb.rc ファイルにある
  • Android が Settings で選択された USB モードを UVC に切り替えるには、更新済みの USB HAL が必要
  • GRF プログラムのため、Android 14 にアップグレードされる多くのデバイスは更新された USB HAL を受け取れない可能性があり、その場合この機能は動作しない

プラットフォーム対応と限界

  • Google が Android にネイティブ USB ウェブカメラ機能を実装したことで、この機能を望むデバイスメーカーは採用できるようになる
  • Webcam Service アプリが予想どおり AOSP に含まれれば、デバイスメーカーはウェブカメラ機能の実装に活用できる
  • Apple の Continuity Camera と比較されるかもしれないが、Android の方式は複数のプラットフォームで動作する
  • Android 14 を実行し要件を満たすスマートフォンは、標準 USB ウェブカメラに切り替わり、あらゆる PC で使用できる

1件のコメント

 
GN⁺ 2023-09-23
Hacker News の意見
  • scrcpy はすでにこの用途に非常に優れている: https://github.com/Genymobile/scrcpy
    OBS でスマートフォンのカメラをストリーミングするには、adb でデバイスを待ち受け、wlan0 の IP を取得し、adb tcpip 5555adb connect で接続してから、scrcpy -e --v4l2-sink=/dev/video0 --lock-video-orientation=1 -n -N を実行すればよい

    • scrcpy は本当に良い。カメラアプリの画面キャプチャをストリーミングするのではなく、カメラを直接ストリーミングするネイティブ対応がまもなく入る予定: https://github.com/Genymobile/scrcpy/pull/4213
      ソースからビルドできるなら、その PR の上に追加コミットも載せてあり、Android の制限付き高速キャプチャモードに対応することで 120fps/240fps のカメラストリーミングが可能になる。会議用途ではあまり役に立たないが、高フレームレートの複合現実 VR 映像をキャプチャするには有用。私の知る限り、プロプライエタリかオープンソースかを問わず、60fps を超える Android ウェブカメラアプリはない
    • adb ツール群はかなり揃っているようなので、こちらで足りていない 2 点について助言がほしい。1 つは ADB/TCP の固定ポートを設定するか、PC へ自動転送する方法で、Android は今では毎回ポートを変える。もう 1 つはモバイルホットスポットで ADB/TCP を有効にする方法で、Android が “Please connect to WiFi” と文句を言う
      この 2 つを除けば、scrcpy、KDE Connect、Waydroid のおかげで Linux-Android 統合はほぼ完璧で、Apple ユーザーもうらやむほどだ
    • 逆に、コンピュータの画面を Android デバイスで見る方法もあるだろうか?Android デバイスを PDF プレゼン用のリモコンとして使いたいのだが、今は KDE Connect で操作はできても現在のスライドを Android デバイス上で見られず、リアルタイム注釈はなおさらできない
    • 最近 MacOS ARM ユーザーになったのだが、こういう解決策が MacOS には適用できない小さな不運があちこちに見え始めている
  • 少し横道にそれるが、ロックダウン中に iPhone をウェブカメラとして使う方法を探していて VDO.Ninja を見つけた: https://vdo.ninja/
    最初は OBS に映像フィードを送る手段で、それでウェブカメラ入力を作っていた。プロジェクトが大きくなるにつれ、ブラウザ内でデスクトップ映像と音声共有を直接立ち上げる、Zoom のような用途にも使えるようになり、そのおかげでリモートのバーチャル映画鑑賞会を運営できた
    ルーム作成 UI でも可能だが、URL パラメータだけですべて構成できるので、はるかに柔軟で堅牢だった: https://docs.vdo.ninja/master/how-does-it-work
    送信者と受信者の URL を作ると、WebRTC で自動接続される。たとえば VLC ウィンドウをキャプチャして映像と音声を送るソースを作り、2 つの宛先 URL がその映像・音声を受け取りつつ、それぞれのマイク音声も互いに送るようにできた。だからブラウザ内で一緒に映画を見聞きしながら会話もできた。このプロジェクトとは何の関係もなく、ただ本当に素晴らしいと思っている
    OBS はコンピュータ画面を Twitch などへストリーミングするときに使うツール: https://obsproject.com/

    • iPhone しか持っておらず、ほかの Apple デバイスがないならこれは良さそう。ただ、MacBook がいまだに 1080p カメラを搭載して出てくるのはかなり奇妙だ。今回のイベントではなく以前のイベントだったと思うが、デスクトップの FaceTime で iPhone をカメラとして使うデモをしていた
    • 私はこの用途に Elgato EpocCam アプリを使っているが、OBS も含めて全般的に完璧に動作している: https://apps.apple.com/us/app/epoccam-webcamera-for-computer/id435355256
  • うれしい追加機能だ。各社はトラッキング機能やポートレートモードのようなものを備えたカメラを作ろうと、時間と労力を費やしてきた
    ただ、パンデミックであらゆるものが突然リモートに切り替わり、ウェブカメラを手に入れようと大騒ぎしていた時期に比べると、少し遅れて出てきた感じはする。そのときにサードパーティアプリを買わせるのではなく、この機能を提供してくれていればよかったと思う

    • その通り。ロックダウンが一般的になった頃、これは間違いなく 20% 時間プロジェクトのようなアプリとして出てくると思っていた。Wyze は 2020 年 3 月に、セキュリティカメラをウェブカメラとして使えるようにする方法をすでに出していた: https://www.theverge.com/2020/3/31/21202022/wyze-firmware-update-webcam-security-camera-transform-solution-guide
    • 遅かったが、出ないよりはましだ。当時ウェブカメラを買ったが、それでもスマートフォン側の画質の方がはるかに良い可能性が高い
    • これもトレードオフだ。得るものもあるが、Google のひどいプロダクトプロセスも一緒についてくる
  • 自分にとっては少なすぎるし、遅すぎた。こういう「ホットテイク」をする人間にはなりたくないが、少し聞いてほしい。2013年まで携帯電話なしで固定電話だけを使っていて、Nexus 4から始め、2〜3年ごとにPixel 6まで買い替えてきた。ところが明日、初めてのiPhoneが届く
    理由はいろいろある。Googleのスマホを外部ディスプレイに挿してミラーリングできないし、DisplayPort出力は理由もなくソースコード上で明示的に無効化されている: https://twitter.com/MishaalRahman/status/1189998588023234560 他のスマホでは普通にできる機能だ
    Androidスマホのテキストメッセージにも、別アプリなしではアクセスできない。adb backupを試してもだめで、root化すれば可能かもしれないが、普通はroot化の過程で全部消えるものだと理解している
    スマホのバックアップにもアクセスできない。Googleのサーバーにしか保存されず、それに近づく唯一の方法はスマホに復元することだけだ。物理的に自分が買った端末を手に持っているのに、その中のすべてにアクセスできない。iPhoneならWindowsやMacにつないでバックアップをコンピューターにダンプでき、メッセージ、システム設定、連絡先、写真、データベースなど、ほとんどすべてが入っている。例外があるとすればハードウェア保護キーくらいかもしれない
    Googleのふざけた振る舞いについても言うまでもない。メッセンジャーの乱立、複数サービスの終了、貧弱なサポート、広告とトラッキングのより強い統合といったものだ。Appleも完璧ではないが、しばらくは壁に囲まれた庭の中に入ってみる価値があると感じている。iOSにはディスプレイ出力、自分のデバイスへのアクセス、筋の通ったメッセージング、そして少なくともプライバシーを気にしているような感じがある。逆説的だが、Google製品よりApple製品を使っているときのほうが、自分にコントロール権があると感じる

    • 自分は数年ごとに両方を行き来していて、今はiPhone 14を使っている。正直、Androidのほうがうまくやっていることも多い。iOSには「Appleだから」という理由で生じる馬鹿げた制約が多すぎる
      たとえば充電速度や予想充電時間が分からないので、複数の充電器の中からiPhone対応の急速充電器とケーブルを選べているか確認しにくいし、ChromeやFirefoxが入っていても、テキストを選択してWeb検索を押すとSafariに飛ぶ。こういう小さなイライラが多く、OSが閉じすぎていてできることがない
      Androidははるかにカスタマイズしやすいし、iPhoneでGBAエミュレーターを動かすようなサイドロードもずっと簡単だ。Samsungの折りたたみスマホのような、より面白い端末もAndroidエコシステムには多い。Macとのエコシステム統合は良いが、どちらか一方が明確に優れているとは言いにくい
    • Pixel 8ではDisplayPort出力の問題が変わるようだ。それに、テキストメッセージやスマホのバックアップへのアクセス問題は、すべてのAndroidスマホに当てはまるわけではない
      Googleが終了したサービスの中で自分に影響したものはないし、メッセンジャーの乱立が何を指しているのかもよく分からない。どのサポートが不足しているという話なのかも明確ではない
    • 2009年からAndroidスマホを使ってきて、次のスマホはAppleに替えようかかなり真剣に考えている。挙げられた理由に加えて、エコシステムが本当にごちゃごちゃしている。この10年はNexus/Pixelだけを買ってきたが、性能にはずっと失望してきた
      Pixel 1 XLは素晴らしかったが、2年ほど経つとカメラが頻繁に失敗し、起動に3秒以上かかったり、よく落ちたりした。結局バッテリー持ちも悪くなり、交換バッテリーも数カ月で劣化したので乗り換えた
      Pixel 3aはセキュリティアップデート終了の2カ月前にポケットから落ちて壊れた。全体としては悪くないスマホだったが、Googleは期待したほど長くサポートしてくれなかった。Pixel 6 Proは今のところ問題ないが、妻のPixel 5には遅い性能や不安定なセルラー接続などの問題がある
      「Pixelスマホを買うな」というのが教訓なのかもしれないが、代替はセキュリティ面でもっと悪夢に近い可能性がある。Galaxyスマホには、削除すべきゴミアプリが信じられないほど大量にプリインストールされていた。PixelはGoogleアプリだけで、その多くは削除できるので、30社分のアプリがあらかじめ入っていて消せないかもしれない状況よりは、プライバシーとセキュリティの不安が小さい
      何年もAppleをかなり批判してきたので、結局プラットフォーム移行が最善に見えてしまうのは残念だ
    • メッセンジャーの乱立はつらいが、金持ちだけが使えるメッセンジャーよりはましだと思う。Appleを選ぶということは、そういうメッセンジャーに入るということだ
      いくつかの不便はかなり腹立たしく見えるが、好きなコンピューターでコードを書いて自分のスマホや友人のスマホで実行するために定期購読料を払い、どんな理由でも拒否できる審査担当者に提出しなければならないという制約を受け入れるほどではない
    • 聞く限りでは、主にGoogleとGoogle製端末に関する問題が大きそうだ。個人的にはLineageOSを入れたFairphone 4にかなり満足している。Murenaも/e/入りの脱Google端末をそのまま販売している
      こうしたシステムではroot adbアクセスが可能で、そうすればSQLiteのメッセージデータベースにもアクセスできる。USB-CのDP代替モードによる画面ミラーリングは標準で動作し、Androidの「デスクトップモード」も有効にできるが、かなり基本的で実験的な状態だ
      Fairphoneは長期サポートがあり、修理しやすく、メインラインカーネルも動かせる(postmarketOSなど)。もちろん、どのAndroidスマホであっても、OSの面では依然としてGoogleに依存している
      Googleに対する多くの不満には同意するが、Appleへ行くのは一つの悪を別の悪に替えるような感じだ。Appleの携帯電話を絶対に「自分のもの」とは呼ばないし、Appleが「自分のデバイスへのアクセス」を提供しているとも感じない
  • 1年以上Camoアプリを使っている。非常によく動作し、Wi-Fiでカメラを見ることにも対応しているのでケーブルが不要だ。基本アカウントは無料: https://reincubate.com/camo/

    • 自分も気に入って数カ月課金したが、ときどき約1000msの遅延が発生した。唯一の解決策はWindowsドライバーを再インストールすることだった。iPhoneとAndroid端末の両方で、少なくとも一度は発生し、より良い解決策がなかったので解約した
    • 同意。古いiPhone 7をWebカメラとして使うためにCamoを数年間毎日使ってきたが、普通のWebカメラよりはるかに良い映像が得られる
  • これは数年前からやっていたこと。どういう意味でまだサポートがないと言っているのか分からない

    • OBS とスタンドアロンの DroidCam が、Android アプリと PC アプリで既にこれを実現している。これはそうしたアプリを統合したものなのか、それとも似たような何かなのか気になる
    • 特定の端末でしかできなかったのかもしれない。自分の端末には USB 設定に UVC オプション がない。IP Webcam のような回避策は存在する
  • この機能が入れば、現在 250 ドルの Pixel 6a が市場でコスパ最高のウェブカメラになる可能性が高い

    • 6か月待てるなら、Metro by T-Mobile で新しい回線を開通し、新規回線割引で Pixel 6a を買えば、約 90 ドルで手に入る。端末が 50 ドル、初月料金が 40 ドルで、2か月目は更新しなければよい
      6か月後には自動的にキャリアロックが解除される、とある非常に鬱陶しい割引サイトに書いてあった。リンクはそのサイトがあまりに鬱陶しいので貼らない。6か月のタイマーを開始するには、必ず端末をアクティベートする必要がある
    • 10月4日の Pixel 8 イベント 後には、Pixel 6a の価格はさらに下がりそう
  • 私の知る限り、Nokia N900 では 2009年に gstreamer でこれが可能だった。実際にビデオデバイスを作って使ったわけではないが、v4l2sink はその頃には既にあったはずだと思う。リモートウィンドウや OpenCV でストリーミングするのにはかなり何度も使った
    今まで持った中で唯一良いと思えたスマートフォンだった。Android 端末でも物事がそれくらい簡単ならいいのだが、不思議なことにほとんどいつもそうではない

    • 可能性と柔軟性を重視する端末やソフトウェアは本当に良い。現代のコンシューマー向けシステムは、ユーザーが単純な体験をするようにガードレールを非常に強く設け、構造も硬直的で巨大だ
      それも難しいことで、尊重されるべきだ。だが、ソフトウェアに対するこうした強硬で保守的な見方が、長い間、作られるものを完全に支配してきたように感じる。パワーユーザーにしっかりした足場を与えようとするコンピューティングはますます減っている。技術は距離を広げ続け、より難解になっている。皮肉なことに、より深く入り込み、専門家や探検者になろうとする入口を失い続けているからだ
    • 実はそれよりも前の Symbian 端末でも可能だった
  • Android スマートフォンをドライブレコーダーとして使えたらいいのに。いつ可能になるのだろう。当然できそうな機能に見える

    • Play Store にドライブレコーダーアプリがある
    • 過熱しやすそう
    • ドライブレコーダーが普通のカメラと違って何をしているのか分からない。単に録画ボタンを押すだけでは駄目な理由があるのか?
  • あれば便利な機能ではあるが、多くの人は Zoom 中でもスマートフォンを手元に置いておきたがる気がする。それでも予備のスマートフォンを持っている人は多いかもしれない

    • Zoom 中にスマートフォンで何をしているのか気になる。間違っているとか変だという意味ではなく、自分はそうしないので、他の人がソフトウェアやコンピューターをどう使っているのか知りたい