1 puntos por GN⁺ 2023-09-23 | 1 comentarios | Compartir por WhatsApp
  • Android 14 reduce la necesidad de usar apps separadas para convertir el teléfono en webcam para PC, al permitir ofrecer un modo de webcam USB a nivel del sistema operativo
  • La nueva opción de USB Preferences cambia el dispositivo al modo UVC (USB Video Class), para que las PC con Windows, macOS y Linux lo reconozcan como una webcam USB estándar
  • Sin embargo, la función no se activa automáticamente: deben coincidir la configuración del kernel, la configuración UVC, la actualización del USB HAL y la app de sistema Webcam Service
  • Webcam Service envía los frames de Camera2 API a un nodo /dev/video, y el usuario puede controlar vista previa, zoom y cambio de lente desde una notificación
  • Incluso los dispositivos actualizados a Android 14 pueden quedar excluidos si tienen kernels antiguos o limitaciones de HAL; el soporte real depende de la implementación del fabricante

Modo de webcam USB en Android 14

  • A partir de Android 14, la función para usar un smartphone como webcam para PC puede estar integrada en el propio Android OS
  • Durante la época de COVID aumentó el uso de plataformas de videoconferencia como Zoom y Google Meet, pero las buenas webcams eran difíciles de conseguir o caras, y la calidad de las webcams integradas en laptops también era limitada
  • Las cámaras de los smartphones ofrecen mejor calidad de imagen que la mayoría de las webcams, por lo que muchos usuarios ya usaban software de terceros para usar el smartphone como si fuera una webcam
  • En Android 14 puede aparecer una opción USB webcam en USB Preferences
    • Los modos USB existentes incluyen transferencia de archivos/Android Auto (MTP), tethering USB (NCM), MIDI, PTP, entre otros
    • Al seleccionar USB webcam, si el dispositivo lo admite, el modo USB cambia a UVC
    • La PC conectada con Windows, macOS o Linux reconoce el dispositivo Android como una webcam USB estándar
    • También podría ser posible con otros dispositivos Android

Condiciones necesarias para activar la función

  • El soporte de webcam en Android 14 no es una función activada por defecto
  • Para que funcione en la práctica, se requieren cuatro condiciones
    • Activar la configuración del kernel Linux
    • Configuración de UVC gadget
    • Actualización del USB HAL
    • Precarga de una nueva app de sistema

Requisitos de configuración del kernel

  • La configuración necesaria del kernel Linux es CONFIG_USB_CONFIGFS_F_UVC
  • Esta configuración es necesaria para que un dispositivo Android pueda montarse como UVC gadget
  • Es probable que muchos dispositivos que se actualicen a Android 14 y casi todos los dispositivos que salgan al mercado con Android 14 tengan un kernel con esta configuración activada
    • Generic Kernel Image (GKI) la tiene activada por defecto desde android12-5.10
    • Los dispositivos lanzados con Android 12 o superior y que usen Linux kernel 5.10 o superior deben incluir un kernel GKI
  • En el ecosistema Android, las actualizaciones de versión mayor del kernel son poco frecuentes, y el programa Google Requirements Freeze (GRF) permite certificar implementaciones de proveedores antiguas, por lo que algunos dispositivos actualizados a Android 14 podrían no soportar la función de webcam USB
  • La forma más directa de comprobar el soporte es verificar la versión del kernel y si la configuración está activada
    • Verificar la versión del kernel:
      • adb shell "cat /proc/version"
    • Verificar la configuración del kernel:
      • adb shell "zcat /proc/config.gz | grep 'CONFIG_USB_CONFIGFS_F_UVC'"
  • Por ejemplo, el Galaxy Z Fold 5 con Android 13 usa el GKI android13-5.15 y tiene CONFIG_USB_CONFIGFS_F_UVC=y, por lo que, si se actualiza a Android 14, podría soportar la función de webcam USB siempre que cumpla las demás condiciones previas

App de sistema Webcam Service

  • Algunas betas de Android 14 QPR1 para dispositivos Pixel incluyen una nueva app de sistema llamada Webcam Service
    • El nombre del paquete es com.android.deviceaswebcam
    • Depende de la biblioteca compartida libjni_deviceAsWebcam.so
    • Esta app y la biblioteca estarán incluidas en la próxima publicación del código fuente de Android 14
  • La app Webcam Service implementa el servicio DeviceAsWebcam, que convierte un dispositivo Android en webcam
  • Este servicio envía los frames de la cámara a un nodo /dev/video que el dispositivo host puede leer
  • Según la política de SELinux, solo los procesos del dominio device_as_webcam pueden acceder al nodo /dev/video
    • En la práctica, el único sujeto que accede es la app de sistema Webcam Service
    • Por lo tanto, el soporte nativo de webcam USB de Android 14 puede ser aprovechado por los fabricantes de dispositivos, pero no directamente por apps de terceros

Cómo se inicia la webcam USB y controles del usuario

  • Cuando se activa la nueva opción USB webcam en USB Preferences, el sistema transmite el intent android.hardware.usb.action.USB_STATE
    • El intent incluye los extras connected y uvc
  • Webcam Service tiene un receiver que recibe este intent
    • El extra uvc está configurado como true
    • El método de framework android.hardware.usb#isUvcSupportEnabled() devuelve true
    • Si se cumplen ambas condiciones, se inicia el servicio del sistema
  • isUvcSupportEnabled() devuelve true cuando la propiedad del sistema ro.usb.uvc.enabled es true
    • Esta propiedad debe ser configurada por el OEM en tiempo de compilación
    • Si no está configurada, la opción USB webcam no se muestra en USB Preferences y Webcam Service tampoco se inicia
    • Esa propiedad solo puede ser leída por apps de sistema como Settings y Webcam Service
  • Cuando Webcam Service se inicia, aparece una nueva notificación que permite al usuario configurar la webcam
    • Al tocar la notificación, se abre la vista previa de la cámara
    • El usuario puede hacer zoom in/out o cambiar de lente
  • Internamente, la app Webcam Service inicia un foreground service para que el sistema no la cierre
  • Usa Camera2 API y soporta streaming en 720p (1280×720) o 1080p (1920×1080)
  • En el host conectado, el nombre del dispositivo de webcam aparece como Android Webcam

ConfigFS y USB HAL

  • El nombre que se muestra en el host, los parámetros de video y el método exacto de codificación dependen de cómo el fabricante del dispositivo configure el UVC gadget mediante configfs
  • En dispositivos Pixel basados en Tensor, la configuración de UVC gadget function de Google está en los archivos init.gs[101|201].usb.rc dentro de /vendor/etc/init/hw
  • Para que Android cambie al modo USB seleccionado en Settings a UVC, se necesita un USB HAL actualizado
  • Debido al programa GRF, es posible que muchos dispositivos actualizados a Android 14 no reciban un USB HAL actualizado; en ese caso, la función no funcionará

Soporte de plataforma y límites

  • Al implementar en Android una función nativa de webcam USB, Google permite que los fabricantes de dispositivos que quieran la función puedan adoptarla
  • Si la app Webcam Service se incluye en AOSP como se espera, los fabricantes de dispositivos podrán usarla para implementar la función de webcam
  • Puede compararse con Continuity Camera de Apple, pero el enfoque de Android funciona en varias plataformas
  • Los teléfonos que ejecuten Android 14 y cumplan los requisitos pueden cambiarse a una webcam USB estándar y usarse en cualquier PC

1 comentarios

 
GN⁺ 2023-09-23
Opiniones de Hacker News
  • scrcpy ya es excelente para este uso: https://github.com/Genymobile/scrcpy
    Para transmitir la cámara del teléfono en OBS, basta con esperar el dispositivo con adb, obtener la IP de wlan0, conectarse con adb tcpip 5555 y adb connect, y luego ejecutar scrcpy -e --v4l2-sink=/dev/video0 --lock-video-orientation=1 -n -N

    • scrcpy es realmente bueno. Pronto tendrá soporte nativo para transmitir directamente la cámara, no para transmitir una captura de pantalla de la app de cámara: https://github.com/Genymobile/scrcpy/pull/4213
      Si puedes compilar desde el código fuente, también agregué commits adicionales encima del PR, con soporte para el modo de captura de alta velocidad limitado de Android, lo que permite streaming de cámara a 120fps/240fps. No sirve de mucho para reuniones, pero es útil para capturar video de VR de realidad mixta con alta tasa de cuadros. Hasta donde sé, no existe ninguna app de webcam para Android, propietaria u open source, que supere los 60fps
    • Parece que tienes bastante armado el conjunto de herramientas de adb, así que me gustaría recibir consejos sobre dos cosas que me faltan. Una es cómo configurar un puerto fijo para ADB/TCP o reenviarlo automáticamente a la PC, ya que Android ahora cambia el puerto cada vez. La otra es cómo activar ADB/TCP en un hotspot móvil, porque Android se queja diciendo “Please connect to WiFi”
      Salvo por esas dos cosas, la integración Linux-Android es casi perfecta gracias a scrcpy, KDE Connect y Waydroid, al punto de que incluso los usuarios de Apple podrían envidiarla
    • ¿Habrá también alguna forma inversa de ver la pantalla de la computadora en un dispositivo Android? Quiero usar un dispositivo Android como control remoto para presentaciones en PDF, pero ahora mismo con KDE Connect puedo controlarlas, aunque no puedo ver la diapositiva actual en el dispositivo Android, y mucho menos hacer anotaciones en tiempo real
    • Hace poco me convertí en usuario de MacOS ARM, y estoy empezando a ver por todos lados pequeñas desgracias como esta, donde estas soluciones no aplican a MacOS
  • Un poco tangencial, pero durante el confinamiento encontré VDO.Ninja mientras buscaba una forma de usar un iPhone como webcam: https://vdo.ninja/
    Al principio era una forma de enviar un feed de video a OBS, y con eso armé una entrada de webcam. A medida que el proyecto creció, también se pudo usar para algo parecido a Zoom, mostrando directamente en el navegador video del escritorio y audio compartidos, lo que me permitió organizar noches de cine virtuales remotas
    También se puede hacer con la UI para crear salas, pero como todo se puede configurar solo con parámetros de URL, era mucho más flexible y robusto: https://docs.vdo.ninja/master/how-does-it-work
    Si creas URLs de emisor y receptor, se conectan automáticamente mediante WebRTC. Por ejemplo, podía crear una fuente que capturara una ventana de VLC y enviara video y audio, y dos URLs de destino recibían ese video y audio mientras también se enviaban mutuamente el audio de sus micrófonos. Así podíamos ver y escuchar una película juntos dentro del navegador y conversar al mismo tiempo. No tengo ninguna relación con este proyecto; simplemente creo que es realmente excelente
    OBS es una herramienta para transmitir la pantalla de la computadora a sitios como Twitch: https://obsproject.com/

    • Si solo tienes un iPhone y ningún otro dispositivo Apple, esto se ve bien. Dicho eso, es bastante raro que las MacBook sigan viniendo con una cámara 1080p. Creo que no fue en este evento, sino en uno anterior, donde demostraron usar el iPhone como cámara en FaceTime de escritorio
    • Yo uso la app Elgato EpocCam para esto, y en general funciona perfectamente, incluso con OBS: https://apps.apple.com/us/app/epoccam-webcamera-for-computer/id435355256
  • Es una función nueva bienvenida. Las empresas han dedicado tiempo y esfuerzo a crear cámaras con funciones como seguimiento o modo retrato
    Aun así, se siente un poco tarde comparado con el momento de la pandemia en que todo cambió de golpe a remoto y había una locura por conseguir webcams. Hubiera sido bueno que ofrecieran esta función entonces, en vez de hacer que la gente comprara apps de terceros

    • Exacto. Cuando los confinamientos empezaron a volverse comunes, definitivamente pensé que esto saldría como una app tipo proyecto del 20% del tiempo. En marzo de 2020, Wyze ya había publicado una forma de usar sus cámaras de seguridad como webcams: https://www.theverge.com/2020/3/31/21202022/wyze-firmware-update-webcam-security-camera-transform-solution-guide
    • Tarde, pero mejor que nunca. Compré una webcam en esa época, pero aun así es muy probable que la calidad de imagen del teléfono sea mucho mejor
    • Esto también es un trade-off. Ganas algunas cosas, pero también viene incluido el desastroso proceso de producto de Google
  • Para mí fue demasiado poco y demasiado tarde. No quiero convertirme en alguien que lanza este tipo de “hot takes”, pero escúchenme un momento: hasta 2013 usé solo teléfono fijo, sin celular, empecé con un Nexus 4 y fui cambiando cada 2 o 3 años hasta llegar al Pixel 6. Pero mañana me entregan mi primer iPhone.
    Hay muchas razones. No se puede conectar un teléfono de Google a una pantalla externa para hacer mirroring, y la salida DisplayPort está deshabilitada explícitamente en el código fuente sin motivo: https://twitter.com/MishaalRahman/status/1189998588023234560 Es una función que anda bien en otros teléfonos.
    Tampoco se puede acceder a los mensajes de texto de un teléfono Android sin una app aparte. Probé con adb backup y no funcionó; quizá se pueda rooteando, pero tengo entendido que el proceso de root normalmente borra todo.
    Tampoco se puede acceder al respaldo del teléfono. Solo se guarda en los servidores de Google, y la única forma de acercarse es restaurarlo en el teléfono. Tengo físicamente en la mano un dispositivo que compré, pero no puedo acceder a todo lo que contiene. Un iPhone se puede conectar a Windows o Mac y volcar el respaldo a la computadora, e incluye mensajes, configuración del sistema, contactos, fotos, bases de datos, casi todo. Tal vez la única excepción sean las llaves de seguridad protegidas por hardware.
    Ni hablar de las jugarretas de Google: la proliferación de mensajeros, el cierre de varios servicios, el soporte deficiente, una integración más fuerte de anuncios y rastreo, etc. Apple tampoco es perfecta, pero siento que por un tiempo vale la pena probar dentro de su jardín amurallado. En iOS hay salida de pantalla, acceso a tu propio dispositivo, mensajería con sentido y, al menos, la sensación de que les importa la privacidad. Paradójicamente, siento que tengo más control usando productos de Apple que productos de Google.

    • Yo voy alternando entre ambos cada pocos años y ahora uso un iPhone 14. Sinceramente, Android hace mejor muchas cosas. iOS tiene demasiadas restricciones tontas que existen “porque Apple”.
      Por ejemplo, no se puede saber la velocidad de carga ni el tiempo estimado de carga, así que es difícil confirmar si elegiste, entre varios cargadores, uno de carga rápida compatible con iPhone y el cable correcto; y aunque tengas Chrome o Firefox instalados, si seleccionas texto y presionas buscar en la web, te manda a Safari. Hay muchas pequeñas molestias de ese tipo, y como el sistema operativo es tan cerrado, no hay nada que puedas hacer.
      Android es mucho más fácil de personalizar, y hacer sideloading, como correr un emulador de GBA en un iPhone, también es más sencillo. En el ecosistema Android también hay dispositivos más interesantes, como los plegables de Samsung. La integración del ecosistema con Mac es buena, pero es difícil decir que uno sea claramente mejor que el otro.
    • Parece que en el Pixel 8 cambia el problema de la salida DisplayPort. Y el problema de acceso a mensajes de texto o respaldos del teléfono no aplica a todos los teléfonos Android.
      Ninguno de los servicios que Google mató me afectó, y tampoco sé bien a qué se refieren con proliferación de mensajeros. Tampoco queda claro qué soporte falta.
    • Uso teléfonos Android desde 2009 y estoy considerando bastante en serio cambiarme a Apple para mi próximo teléfono. Además de las razones mencionadas, el ecosistema es realmente un desastre. En los últimos 10 años solo compré Nexus/Pixel y el rendimiento me decepcionó una y otra vez.
      El Pixel 1 XL fue excelente, pero después de unos 2 años la cámara empezó a fallar constantemente; tardaba más de 3 segundos en abrir o se cerraba seguido. Al final la batería se degradó, y la batería de reemplazo también se deterioró en pocos meses, así que pasé a otro.
      El Pixel 3a se me cayó del bolsillo y se rompió dos meses antes de que terminara el soporte de actualizaciones de seguridad. En general era un buen teléfono, pero Google no le dio soporte por tanto tiempo como esperaba. El Pixel 6 Pro ha estado bien hasta ahora, pero el Pixel 5 de mi esposa tiene problemas como rendimiento lento y conexión celular inestable.
      Tal vez la lección sea “no compres un Pixel”, pero las alternativas pueden ser aún más pesadillescas en seguridad. Los teléfonos Galaxy venían con una cantidad increíble de apps basura preinstaladas que había que borrar. El Pixel solo trae apps de Google y la mayoría se puede eliminar, así que las preocupaciones de privacidad y seguridad son menores que con 30 apps de empresas instaladas de fábrica que quizá ni siquiera puedas quitar.
      He criticado mucho a Apple durante años, así que me decepciona que, al final, cambiar de plataforma parezca la mejor opción.
    • La proliferación de mensajeros es dolorosa, pero me parece mejor que un mensajero que solo pueden usar los ricos. Si eliges Apple, entras a ese mensajero.
      Algunas molestias suenan bastante irritantes, pero no tanto como para aceptar la restricción de tener que pagar una suscripción para escribir código en la computadora que quiera y ejecutarlo en mi teléfono o en el de un amigo, y además tener que enviarlo a un revisor que puede rechazarlo por cualquier motivo.
    • Por lo que cuentas, el problema parece ser principalmente con Google y los dispositivos de Google. Personalmente estoy bastante conforme con un Fairphone 4 con LineageOS. Murena también vende directamente dispositivos desgoogleados con /e/.
      En esos sistemas se puede tener acceso adb como root, y con eso también acceder a la base de datos SQLite de los mensajes de texto. El mirroring de pantalla mediante el modo alternativo DP de USB-C funciona de fábrica, y también se puede activar el “modo escritorio” de Android, aunque está bastante básico y experimental.
      Fairphone ofrece soporte prolongado, es fácil de reparar y también puede correr un kernel mainline (postmarketOS, etc.). Por supuesto, desde el punto de vista del sistema operativo, cualquier teléfono Android sigue dependiendo de Google.
      Estoy de acuerdo con muchas quejas sobre Google, pero pasarse a Apple se siente como cambiar un mal por otro. Nunca llamaría “mío” a un teléfono de Apple, y tampoco siento que Apple ofrezca “acceso a tu propio dispositivo”.
  • Llevo más de un año usando la app Camo. Funciona muy bien y también permite ver la cámara por Wi-Fi, así que no hace falta cable. La cuenta básica es gratuita: https://reincubate.com/camo/

    • A mí también me gustaba y pagué varios meses, pero de vez en cuando aparecía una latencia de unos 1000 ms. La única solución era reinstalar el driver de Windows. Me pasó más de una vez, tanto con iPhone como con Android, y como no había una solución mejor, lo cancelé.
    • De acuerdo. Uso Camo todos los días desde hace años para usar un viejo iPhone 7 como webcam, y da una imagen mucho mejor que una webcam común.
  • Esto ya se venía haciendo desde hace años. No entiendo en qué sentido todavía no había soporte

    • OBS y la app independiente DroidCam ya hacen esto con una app para Android y una app para PC. Me pregunto si esto integra ese tipo de apps o si es algo parecido
    • Puede que solo haya sido posible en ciertos dispositivos. En el mío no hay opción UVC en la configuración USB. Existen soluciones alternativas como IP Webcam
  • Si se incorpora esta función, el Pixel 6a, que ahora cuesta 250 dólares, tiene muchas posibilidades de convertirse en la webcam con mejor relación precio-calidad del mercado

    • Si puedes esperar 6 meses, abriendo una línea nueva en Metro by T-Mobile y comprando el Pixel 6a con el descuento por línea nueva, puedes conseguirlo por unos 90 dólares. El teléfono cuesta 50 dólares, el primer mes de servicio 40 dólares, y simplemente no renuevas el segundo mes
      En un sitio de descuentos muy molesto decía que después de 6 meses se desbloquea automáticamente del operador. No voy a poner el enlace porque ese sitio es demasiado molesto. Para que empiece a correr el plazo de 6 meses, hay que activar el teléfono sí o sí
    • Después del evento del Pixel 8 del 4 de octubre, creo que el precio del Pixel 6a va a bajar aún más
  • Hasta donde sé, en el Nokia N900 esto ya era posible en 2009 con gstreamer. En realidad no llegué a crear y usar un dispositivo de video, pero creo que v4l2sink ya existía en ese entonces. Lo usé bastantes veces para hacer streaming con una ventana remota y OpenCV
    Fue el único teléfono realmente bueno que tuve hasta ahora. Ojalá en los dispositivos Android las cosas fueran así de fáciles, pero, curiosamente, casi nunca lo son

    • Me encantan los dispositivos y el software que enfatizan las posibilidades y la flexibilidad. Los sistemas de consumo modernos ponen barandales muy fuertes para que el usuario tenga una experiencia simple, y su estructura también es rígida y enorme
      Eso también es difícil y merece respeto. Pero siento que esta visión dura y conservadora del software lleva mucho tiempo dominando por completo lo que se construye. Cada vez hay menos computación que les dé a los usuarios avanzados una base firme. La tecnología sigue tomando distancia y volviéndose más críptica. Irónicamente, porque seguimos perdiendo las vías de entrada para profundizar y convertirse en experto o explorador
    • De hecho, también era posible en dispositivos Symbian anteriores a eso
  • Me gustaría poder usar un teléfono Android como dashcam. ¿Cuándo será posible? Parece una función que debería ser obvia

    • Hay apps de dashcam en Play Store
    • Me parece que se sobrecalentaría fácilmente
    • No sé qué hace una dashcam de distinto frente a una cámara normal. ¿Hay alguna razón para no simplemente presionar el botón de grabar?
  • Es una función útil, pero creo que la mayoría va a querer tener el teléfono en la mano incluso durante una llamada de Zoom. Aun así, puede que mucha gente tenga un teléfono de repuesto

    • Me da curiosidad qué hacen con el teléfono durante Zoom. No digo que esté mal ni que sea raro; yo no lo hago, así que me interesa saber cómo otras personas usan el software y las computadoras