- 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
- Generic Kernel Image (GKI) la tiene activada por defecto desde
- 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'"
- Verificar la versión del kernel:
- Por ejemplo, el Galaxy Z Fold 5 con Android 13 usa el GKI
android13-5.15y tieneCONFIG_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
- El nombre del paquete es
- 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/videoque el dispositivo host puede leer - Según la política de SELinux, solo los procesos del dominio
device_as_webcampueden 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
connectedyuvc
- El intent incluye los extras
- Webcam Service tiene un receiver que recibe este intent
- El extra
uvcestá configurado comotrue - El método de framework
android.hardware.usb#isUvcSupportEnabled()devuelvetrue - Si se cumplen ambas condiciones, se inicia el servicio del sistema
- El extra
isUvcSupportEnabled()devuelvetruecuando la propiedad del sistemaro.usb.uvc.enabledestrue- 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.rcdentro 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
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 dewlan0, conectarse conadb tcpip 5555yadb connect, y luego ejecutarscrcpy -e --v4l2-sink=/dev/video0 --lock-video-orientation=1 -n -NSi 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
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
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/
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
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 backupy 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.
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.
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.
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.
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.
En esos sistemas se puede tener acceso
adbcomo 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/
Esto ya se venía haciendo desde hace años. No entiendo en qué sentido todavía no había soporte
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
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í
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
v4l2sinkya existía en ese entonces. Lo usé bastantes veces para hacer streaming con una ventana remota y OpenCVFue 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
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
Me gustaría poder usar un teléfono Android como dashcam. ¿Cuándo será posible? Parece una función que debería ser obvia
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