1 points par GN⁺ 2023-09-23 | 1 commentaires | Partager sur WhatsApp
  • Android 14 réduit le recours à des applications dédiées pour utiliser son téléphone comme webcam de PC, en permettant de proposer un mode webcam USB au niveau de l’OS
  • La nouvelle option USB Preferences fait basculer l’appareil en mode UVC (USB Video Class), afin que les PC Windows, macOS et Linux le reconnaissent comme une webcam USB standard
  • La fonction ne s’active toutefois pas automatiquement : la configuration du noyau, la configuration UVC, la mise à jour de l’USB HAL et l’application système Webcam Service doivent être compatibles
  • Webcam Service transmet les images de l’API Camera2 vers un nœud /dev/video, et l’utilisateur peut contrôler l’aperçu, le zoom et le changement d’objectif depuis une notification
  • Même des appareils passés à Android 14 peuvent être exclus en raison d’un ancien noyau ou de contraintes liées au HAL ; la prise en charge réelle dépend donc de l’implémentation du constructeur

Le mode webcam USB d’Android 14

  • À partir d’Android 14, la possibilité d’utiliser un smartphone comme webcam pour PC peut être intégrée directement à l’OS Android
  • Pendant la période du COVID, l’usage de plateformes de visioconférence comme Zoom et Google Meet a augmenté, mais les bonnes webcams étaient difficiles à trouver ou chères, et la qualité des webcams intégrées aux ordinateurs portables restait limitée
  • Les appareils photo des smartphones offrent une meilleure qualité d’image que la plupart des webcams ; jusque-là, beaucoup d’utilisateurs employaient donc des logiciels tiers pour utiliser leur smartphone comme webcam
  • Dans Android 14, une option USB webcam peut apparaître dans USB Preferences
    • Les modes USB existants incluent le transfert de fichiers/Android Auto (MTP), le partage de connexion USB (NCM), MIDI, PTP, etc.
    • Si l’on sélectionne USB webcam, le mode USB bascule en UVC lorsque l’appareil le prend en charge
    • Le PC Windows, macOS ou Linux connecté reconnaît l’appareil Android comme une webcam USB standard
    • Cela pourrait aussi être possible avec d’autres appareils Android

Conditions nécessaires à l’activation de la fonction

  • La prise en charge de la webcam dans Android 14 n’est pas une fonction activée par défaut
  • Son fonctionnement effectif nécessite quatre conditions
    • Activation des réglages du noyau Linux
    • Configuration du UVC gadget
    • Mise à jour de l’USB HAL
    • Préchargement de la nouvelle application système

Exigences de configuration du noyau

  • Le réglage du noyau Linux requis est CONFIG_USB_CONFIGFS_F_UVC
  • Ce réglage est nécessaire pour qu’un appareil Android puisse être monté comme UVC gadget
  • Beaucoup d’appareils mis à niveau vers Android 14 et presque tous les appareils lancés avec Android 14 sont susceptibles d’avoir un noyau où ce réglage est activé
    • Generic Kernel Image (GKI) l’active par défaut depuis android12-5.10
    • Les appareils lancés avec Android 12 ou une version ultérieure et utilisant un noyau Linux 5.10 ou plus récent doivent embarquer un noyau GKI
  • Dans l’écosystème Android, les mises à niveau majeures de version du noyau sont rares, et le programme Google Requirements Freeze (GRF) permet aussi de certifier d’anciennes implémentations fournisseur ; certains appareils mis à niveau vers Android 14 peuvent donc ne pas prendre en charge la fonction webcam USB
  • La façon la plus directe de vérifier la prise en charge consiste à contrôler la version du noyau et l’activation du réglage
    • Vérifier la version du noyau :
      • adb shell "cat /proc/version"
    • Vérifier la configuration du noyau :
      • adb shell "zcat /proc/config.gz | grep 'CONFIG_USB_CONFIGFS_F_UVC'"
  • Par exemple, le Galaxy Z Fold 5 sous Android 13 utilise le GKI android13-5.15 et dispose de CONFIG_USB_CONFIGFS_F_UVC=y ; s’il passe à Android 14, il pourrait donc prendre en charge la fonction webcam USB, à condition de remplir les autres prérequis

L’application système Webcam Service

  • La bêta Android 14 QPR1 pour certains appareils Pixel inclut une nouvelle application système appelée Webcam Service
    • Son nom de package est com.android.deviceaswebcam
    • Elle dépend de la bibliothèque partagée libjni_deviceAsWebcam.so
    • Cette application et cette bibliothèque devraient être incluses dans la prochaine publication du code source d’Android 14
  • L’application Webcam Service implémente le service DeviceAsWebcam, qui transforme un appareil Android en webcam
  • Ce service transmet les images de la caméra vers un nœud /dev/video lisible par l’appareil hôte
  • Selon la politique SELinux, le nœud /dev/video n’est accessible qu’aux processus du domaine device_as_webcam
    • En pratique, seule l’application système Webcam Service y accède
    • La prise en charge native de la webcam USB dans Android 14 peut donc être utilisée par les fabricants d’appareils, mais pas directement par des applications tierces

Lancement de la webcam USB et contrôles utilisateur

  • Lorsque la nouvelle option USB webcam est activée dans USB Preferences, le système diffuse l’intent android.hardware.usb.action.USB_STATE
    • L’intent contient les extras connected et uvc
  • Webcam Service possède un receiver qui reçoit cet intent
    • L’extra uvc est défini sur true
    • La méthode de framework android.hardware.usb#isUvcSupportEnabled() renvoie true
    • Si ces deux conditions sont réunies, le service système démarre
  • isUvcSupportEnabled() renvoie true lorsque la propriété système ro.usb.uvc.enabled vaut true
    • Cette propriété doit être définie par l’OEM au moment du build
    • Si elle n’est pas définie, l’option USB webcam n’apparaît pas dans USB Preferences et Webcam Service ne démarre pas
    • Cette propriété ne peut être lue que par des applications système comme Settings et Webcam Service
  • Lorsque Webcam Service démarre, une nouvelle notification s’affiche pour permettre à l’utilisateur de configurer la webcam
    • Appuyer sur la notification ouvre l’aperçu de la caméra
    • L’utilisateur peut zoomer/dézoomer ou changer d’objectif
  • En interne, l’application Webcam Service lance un foreground service pour éviter d’être arrêtée par le système
  • Elle utilise l’API Camera2 et prend en charge le streaming en 720p (1280×720) ou 1080p (1920×1080)
  • Sur l’hôte connecté, le nom du périphérique webcam s’affiche comme Android Webcam

ConfigFS et USB HAL

  • Le nom affiché sur l’hôte, les paramètres vidéo et le mode d’encodage exact dépendent de la façon dont le fabricant de l’appareil configure le UVC gadget via configfs
  • Sur les Pixel basés sur Tensor, la configuration UVC gadget function de Google se trouve dans les fichiers init.gs[101|201].usb.rc sous /vendor/etc/init/hw
  • Pour qu’Android bascule en UVC le mode USB sélectionné dans Settings, un USB HAL mis à jour est nécessaire
  • En raison du programme GRF, beaucoup d’appareils mis à niveau vers Android 14 risquent de ne pas recevoir l’USB HAL mis à jour ; dans ce cas, la fonction ne marchera pas

Prise en charge de la plateforme et limites

  • En implémentant une fonction native de webcam USB dans Android, Google permet aux fabricants d’appareils qui le souhaitent de l’adopter
  • Si l’application Webcam Service est bien intégrée à AOSP comme prévu, les fabricants d’appareils pourront s’en servir pour implémenter la fonction webcam
  • On peut la comparer à Continuity Camera d’Apple, mais l’approche Android fonctionne sur plusieurs plateformes
  • Un téléphone sous Android 14 qui remplit les conditions requises peut basculer en webcam USB standard et être utilisé sur n’importe quel PC

1 commentaires

 
GN⁺ 2023-09-23
Avis de Hacker News
  • scrcpy fait déjà très bien l’affaire pour cet usage : https://github.com/Genymobile/scrcpy
    Pour streamer la caméra d’un téléphone dans OBS, il suffit d’attendre l’appareil avec adb, de récupérer l’IP de wlan0, de lancer adb tcpip 5555 puis adb connect, puis d’exécuter scrcpy -e --v4l2-sink=/dev/video0 --lock-video-orientation=1 -n -N

    • scrcpy est vraiment excellent. Un support natif devrait bientôt arriver pour ne pas streamer une capture d’écran de l’appli caméra, mais streamer directement la caméra : https://github.com/Genymobile/scrcpy/pull/4213
      Si vous pouvez compiler depuis les sources, j’ai aussi ajouté des commits par-dessus la PR, avec la prise en charge du mode de capture haute vitesse limité d’Android, ce qui permet un streaming caméra à 120 fps/240 fps. Ce n’est pas très utile pour les réunions, mais c’est pratique pour capturer des vidéos VR de réalité mixte à haute fréquence d’images. À ma connaissance, aucune appli webcam Android, propriétaire ou open source, ne dépasse 60 fps
    • Comme tu sembles avoir une panoplie d’outils adb assez complète, je serais curieux d’avoir des conseils sur deux points qui me manquent. Le premier est de définir un port fixe ADB/TCP ou de le transférer automatiquement vers le PC, car Android change désormais le port à chaque fois. Le second est d’activer ADB/TCP sur un hotspot mobile, parce qu’Android se plaint avec “Please connect to WiFi”
      À part ces deux points, grâce à scrcpy, KDE Connect et Waydroid, l’intégration Linux-Android est presque parfaite, au point de rendre jaloux les utilisateurs Apple
    • À l’inverse, existe-t-il un moyen de voir l’écran de l’ordinateur sur un appareil Android ? J’aimerais utiliser un appareil Android comme télécommande pour des présentations PDF, mais pour l’instant KDE Connect permet bien de contrôler, sans toutefois afficher la diapositive en cours sur l’appareil Android, et encore moins d’annoter en temps réel
    • Je suis récemment passé à MacOS ARM, et je commence à voir un peu partout ces petits coups de malchance où ce genre de solution ne s’applique pas à MacOS
  • C’est un peu hors sujet, mais pendant le confinement, en cherchant un moyen d’utiliser un iPhone comme webcam, j’ai découvert VDO.Ninja : https://vdo.ninja/
    Au départ, c’était un moyen d’envoyer un flux vidéo vers OBS, que j’utilisais ensuite comme entrée webcam. Le projet a pris de l’ampleur et peut désormais aussi servir à quelque chose proche de Zoom, en partageant directement vidéo et audio du bureau dans le navigateur, ce qui m’a permis d’organiser des soirées cinéma virtuelles à distance
    On peut passer par l’interface de création de salon, mais tout peut aussi se configurer uniquement avec des paramètres d’URL, ce qui était beaucoup plus flexible et robuste : https://docs.vdo.ninja/master/how-does-it-work
    En créant des URL émetteur et récepteur, la connexion WebRTC se fait automatiquement. Par exemple, je pouvais créer une source qui capturait une fenêtre VLC pour envoyer vidéo et audio, tandis que deux URL de destination recevaient cette vidéo et cet audio tout en s’envoyant aussi mutuellement le son de leurs micros. On pouvait donc regarder et écouter un film ensemble dans le navigateur tout en discutant. Je n’ai aucun lien avec ce projet, je le trouve simplement vraiment excellent
    OBS est un outil utilisé pour streamer l’écran d’un ordinateur vers des plateformes comme Twitch : https://obsproject.com/

    • Si l’on n’a qu’un iPhone et aucun autre appareil Apple, ça a l’air bien. Cela dit, c’est assez étrange que les MacBook soient encore équipés d’une caméra 1080p. Je crois que ce n’était pas lors de cet événement, mais d’un précédent, où ils avaient montré l’utilisation de l’iPhone comme caméra pour FaceTime sur ordinateur
    • Pour cet usage, j’utilise l’appli Elgato EpocCam, et elle fonctionne parfaitement de manière générale, y compris avec OBS : https://apps.apple.com/us/app/epoccam-webcamera-for-computer/id435355256
  • C’est un ajout bienvenu. Les entreprises ont consacré du temps et des efforts à créer des caméras avec des fonctions comme le suivi ou le mode portrait
    Cela dit, ça arrive un peu tard par rapport au moment où, pendant la pandémie, tout est soudainement passé au télétravail et où tout le monde se ruait sur les webcams. J’aurais aimé que cette fonction existe alors, plutôt que de devoir acheter des applis tierces

    • Oui. Quand les confinements sont devenus courants, je m’attendais vraiment à ce que ça sorte sous forme d’appli de type projet à 20 %. Wyze avait déjà publié en mars 2020 une méthode pour utiliser ses caméras de sécurité comme webcams : https://www.theverge.com/2020/3/31/21202022/wyze-firmware-update-webcam-security-camera-transform-solution-guide
    • Mieux vaut tard que jamais. J’ai acheté une webcam à l’époque, mais la qualité d’image du téléphone a quand même de grandes chances d’être bien meilleure
    • C’est aussi un compromis. On y gagne quelque chose, mais on récupère aussi le processus produit bancal de Google
  • Pour moi, c’est trop peu, trop tard. Je n’ai pas envie d’être quelqu’un qui sort ce genre de « hot take », mais écoutez une seconde : jusqu’en 2013, je n’avais pas de téléphone portable, seulement une ligne fixe, puis j’ai commencé avec un Nexus 4 et j’ai changé tous les 2 ou 3 ans jusqu’au Pixel 6. Mais demain, mon premier iPhone doit être livré.
    Il y a beaucoup de raisons. Impossible de brancher un téléphone Google sur un écran externe pour faire du miroir, et la sortie DisplayPort est explicitement désactivée dans le code source sans raison : https://twitter.com/MishaalRahman/status/1189998588023234560 C’est une fonction qui marche très bien sur d’autres téléphones.
    Impossible aussi d’accéder aux SMS d’un téléphone Android sans application dédiée. J’ai essayé adb backup, ça ne marche pas ; peut-être que c’est possible en rootant, mais à ma connaissance le processus de root efface généralement tout.
    Les sauvegardes du téléphone ne sont pas accessibles non plus. Elles ne sont stockées que sur les serveurs de Google, et le seul moyen de s’en approcher est de les restaurer sur le téléphone. J’ai physiquement entre les mains l’appareil que j’ai acheté, mais je ne peux pas accéder à tout ce qu’il contient. Avec un iPhone, on peut le brancher à Windows ou à un Mac et déverser la sauvegarde sur l’ordinateur, avec les messages, les réglages système, les contacts, les photos, les bases de données, presque tout. Les clés matérielles protégées sont peut-être l’une des seules exceptions.
    Et pas besoin de parler des manigances de Google : la prolifération des messageries, l’arrêt de nombreux services, le support insuffisant, l’intégration toujours plus poussée de la publicité et du pistage. Apple n’est pas parfait non plus, mais j’ai l’impression que cela vaut le coup d’entrer quelque temps dans ce jardin clos. Sur iOS, il y a une sortie écran, l’accès à son propre appareil, une messagerie qui a du sens, et au moins l’impression qu’ils se soucient de la vie privée. Paradoxalement, j’ai l’impression d’avoir plus de contrôle en utilisant un produit Apple qu’un produit Google.

    • Je passe de l’un à l’autre tous les quelques années, et là j’utilise un iPhone 14. Honnêtement, Android fait beaucoup de choses mieux. iOS a beaucoup trop de contraintes stupides qui existent juste « parce que c’est Apple ».
      Par exemple, on ne peut pas connaître la vitesse de charge ni le temps de charge estimé, ce qui rend difficile de vérifier qu’on a bien choisi, parmi plusieurs chargeurs, un chargeur rapide et un câble compatibles iPhone ; et même si Chrome ou Firefox est installé, quand on sélectionne du texte et qu’on lance une recherche web, ça part dans Safari. Il y a plein de petites frustrations de ce genre, et comme le système d’exploitation est tellement fermé, on ne peut rien y faire.
      Android est beaucoup plus personnalisable, et le sideloading, par exemple pour faire tourner un émulateur GBA sur iPhone, y est aussi plus simple. Il y a aussi davantage d’appareils intéressants dans l’écosystème Android, comme les téléphones pliants de Samsung. L’intégration avec l’écosystème Mac est bonne, mais il est difficile de dire que l’un des deux est clairement meilleur.
    • Sur le Pixel 8, il semble que le problème de sortie DisplayPort change. Et les problèmes d’accès aux SMS ou aux sauvegardes du téléphone ne concernent pas tous les téléphones Android.
      Aucun des services tués par Google ne m’a affecté, et je ne sais pas très bien ce que recouvre la prolifération des messageries. Je ne vois pas clairement non plus de quel support insuffisant il est question.
    • J’utilise des téléphones Android depuis 2009, et je réfléchis très sérieusement à passer chez Apple pour mon prochain téléphone. En plus des raisons mentionnées, l’écosystème est vraiment bordélique. Ces dix dernières années, je n’ai acheté que des Nexus/Pixel, et j’ai été constamment déçu par les performances.
      Le Pixel 1 XL était excellent, mais au bout d’environ deux ans, l’appareil photo s’est mis à échouer sans cesse : il mettait plus de 3 secondes à se lancer ou plantait souvent. La batterie a fini par devenir mauvaise, et même la batterie de remplacement s’est dégradée en quelques mois, donc je suis passé à autre chose.
      Le Pixel 3a est tombé de ma poche et s’est cassé deux mois avant la fin des mises à jour de sécurité. Globalement c’était un téléphone correct, mais Google ne l’a pas supporté aussi longtemps que je l’espérais. Mon Pixel 6 Pro va bien jusqu’ici, mais le Pixel 5 de ma femme a des problèmes, notamment des performances lentes et une connexion cellulaire instable.
      La leçon est peut-être « n’achetez pas de Pixel », mais les alternatives peuvent être encore plus cauchemardesques côté sécurité. Les téléphones Galaxy arrivaient avec une quantité incroyable d’applis poubelles préinstallées à supprimer. Sur Pixel, il n’y a que les applis Google, et la plupart peuvent être retirées, donc les inquiétudes de confidentialité et de sécurité sont moindres que sur un appareil avec les applis de 30 entreprises préinstallées, parfois impossibles à désinstaller.
      J’ai beaucoup critiqué Apple pendant des années, et c’est décevant d’en arriver à penser que changer de plateforme est sans doute la meilleure option.
    • La prolifération des messageries est pénible, mais je trouve ça mieux qu’une messagerie réservée aux riches. En choisissant Apple, on entre justement dans ce type de messagerie.
      Certains désagréments ont l’air assez agaçants, mais pas au point d’accepter la contrainte de devoir payer un abonnement récurrent pour écrire du code sur l’ordinateur de mon choix et l’exécuter sur mon téléphone ou celui d’un ami, puis de le soumettre à des examinateurs qui peuvent le refuser pour n’importe quelle raison.
    • À entendre ça, les problèmes semblent surtout concerner Google et les appareils Google. Personnellement, je suis assez satisfait d’un Fairphone 4 sous LineageOS. Murena vend aussi directement des appareils dégooglisés avec /e/.
      Sur ce type de système, l’accès root via adb est possible, ce qui permet aussi d’accéder à la base de données SQLite des SMS. La duplication d’écran via le mode alternatif DP de l’USB-C fonctionne par défaut, et on peut aussi activer le « mode bureau » d’Android, même s’il reste assez basique et expérimental.
      Fairphone assure un support long, la réparation est facile, et on peut aussi faire tourner un noyau mainline (postmarketOS, etc.). Bien sûr, quel que soit le téléphone Android, on reste dépendant de Google côté système d’exploitation.
      Je suis d’accord avec beaucoup de critiques envers Google, mais passer chez Apple me donne l’impression de remplacer un mal par un autre. Je ne qualifierais jamais un téléphone Apple de « mien », et je n’ai pas non plus l’impression qu’Apple donne accès à « son propre appareil ».
  • J’utilise l’application Camo depuis plus d’un an. Elle fonctionne très bien, et elle permet aussi d’utiliser la caméra en Wi-Fi, donc pas besoin de câble. Le compte de base est gratuit : https://reincubate.com/camo/

    • Je l’aimais aussi et j’ai payé pendant quelques mois, mais j’avais parfois environ 1000 ms de latence. La seule solution était de réinstaller le pilote Windows. C’est arrivé plus d’une fois, aussi bien avec un iPhone qu’avec un appareil Android, et comme il n’y avait pas de meilleure solution, j’ai résilié.
    • D’accord. J’utilise Camo tous les jours depuis des années pour me servir d’un vieil iPhone 7 comme webcam, et l’image est largement meilleure qu’avec une webcam classique.
  • Ça, ça se faisait déjà depuis des années. Je ne sais pas trop en quel sens ce n’était pas encore pris en charge

    • OBS et l’application autonome DroidCam le font déjà via une appli Android et une appli PC. Je me demande si c’est une intégration de ce genre d’apps, ou quelque chose de similaire
    • C’était peut-être possible seulement sur certains appareils. Sur le mien, il n’y a pas d’option UVC dans les réglages USB. Il existe des contournements comme IP Webcam
  • Si cette fonctionnalité arrive, le Pixel 6a, actuellement à 250 dollars, pourrait bien devenir la webcam au meilleur rapport qualité-prix du marché

    • Si vous pouvez attendre 6 mois, vous pouvez l’obtenir pour environ 90 dollars en ouvrant une nouvelle ligne chez Metro by T-Mobile et en achetant le Pixel 6a avec la remise nouvelle ligne. Le téléphone coûte 50 dollars, le premier mois d’abonnement 40 dollars, et il suffit de ne pas renouveler le deuxième mois
      J’ai lu sur un site de bons plans très pénible qu’au bout de 6 mois, le téléphone est automatiquement désimlocké. Je ne mettrai pas de lien, ce site est trop pénible. Il faut impérativement activer le téléphone pour lancer le compte à rebours des 6 mois
    • Après l’événement Pixel 8 du 4 octobre, le prix du Pixel 6a devrait encore baisser
  • À ma connaissance, c’était possible sur le Nokia N900 dès 2009 avec gstreamer. Je n’ai jamais réellement créé et utilisé de périphérique vidéo, mais je pense que v4l2sink existait déjà à l’époque. Je m’en suis servi pas mal de fois pour streamer avec une fenêtre distante et OpenCV
    C’est le seul bon téléphone que j’aie jamais possédé. J’aimerais que ce soit aussi simple sur les appareils Android, mais bizarrement ce n’est presque jamais le cas

    • J’aime vraiment les appareils et logiciels qui mettent l’accent sur les possibilités et la flexibilité. Les systèmes grand public modernes installent des garde-fous très stricts pour offrir à l’utilisateur une expérience simple, et leur architecture est aussi rigide que massive
      C’est aussi un travail difficile et respectable. Mais j’ai l’impression que cette vision dure et conservatrice du logiciel domine totalement ce qui se construit depuis longtemps. L’informatique qui donne un vrai point d’appui aux power users se raréfie. La technologie continue de prendre ses distances et de devenir plus obscure. Ironiquement, c’est parce que nous perdons sans cesse les voies d’accès permettant d’aller plus loin et de devenir expert ou explorateur
    • En fait, c’était déjà possible sur des appareils Symbian encore plus anciens
  • J’aimerais pouvoir utiliser un téléphone Android comme dashcam. Quand est-ce que ce sera possible ? Ça paraît être une fonctionnalité évidente

    • Il y a des applis de dashcam sur le Play Store
    • Ça risque de surchauffer facilement
    • Je ne sais pas ce qu’une dashcam fait de différent d’une caméra normale. Pourquoi ne pas simplement appuyer sur le bouton d’enregistrement ?
  • C’est une fonctionnalité sympa à avoir, mais la plupart des gens voudront sans doute garder leur téléphone en main pendant un appel Zoom. Cela dit, beaucoup ont peut-être un téléphone en rab

    • Je me demande ce que les gens font sur leur téléphone pendant un Zoom. Je ne dis pas que c’est mal ou bizarre, c’est juste que je ne le fais pas, donc j’aimerais comprendre comment les autres utilisent les logiciels et les ordinateurs