1 pontos por GN⁺ 2023-09-23 | 1 comentários | Compartilhar no WhatsApp
  • O Android 14 pode reduzir a dependência de apps separados para usar webcam no PC ao oferecer um modo de webcam USB no nível do sistema operacional
  • A nova opção em USB Preferences pode mudar o aparelho para o modo UVC (USB Video Class), fazendo com que PCs com Windows, macOS e Linux o reconheçam como uma webcam USB padrão
  • No entanto, o recurso não é ativado automaticamente; é preciso que a configuração do kernel, a configuração de UVC, a atualização do USB HAL e o app de sistema Webcam Service estejam alinhados
  • O Webcam Service envia frames da API Camera2 para o nó /dev/video, e o usuário pode controlar pré-visualização, zoom e troca de lente pela notificação
  • Mesmo em aparelhos atualizados para o Android 14, dispositivos com kernel antigo ou limitações de HAL podem ficar de fora, então o suporte real depende da implementação do fabricante

Modo de webcam USB no Android 14

  • A partir do Android 14, a função de usar o smartphone como webcam para PC pode passar a fazer parte do próprio Android OS
  • Durante o período da COVID, o uso de plataformas de videoconferência como Zoom e Google Meet aumentou, mas webcams boas eram difíceis de encontrar ou caras, e a qualidade das webcams embutidas em notebooks também era limitada
  • Como as câmeras de smartphones costumam ter qualidade de imagem melhor que a maioria das webcams, muitos usuários já usavam software de terceiros para transformar o celular em webcam
  • No Android 14, a opção USB webcam pode aparecer em USB Preferences
    • Os modos USB existentes incluem transferência de arquivos/Android Auto (MTP), tethering USB (NCM), MIDI e PTP
    • Ao selecionar USB webcam, se o aparelho for compatível, o modo USB muda para UVC
    • O PC conectado com Windows, macOS ou Linux reconhece o dispositivo Android como uma webcam USB padrão
    • Isso também pode funcionar com outros dispositivos Android

Condições necessárias para ativar o recurso

  • O suporte a webcam no Android 14 não é um recurso ativado por padrão
  • Para funcionar na prática, são necessárias quatro condições
    • Ativação da configuração do kernel Linux
    • Configuração do UVC gadget
    • Atualização do USB HAL
    • Pré-instalação de um novo app de sistema

Requisitos de configuração do kernel

  • A configuração necessária do kernel Linux é CONFIG_USB_CONFIGFS_F_UVC
  • Essa configuração é necessária para permitir que o dispositivo Android seja montado como um UVC gadget
  • Muitos aparelhos atualizados para o Android 14 e quase todos os lançados com Android 14 provavelmente terão kernels com essa configuração ativada
    • No Generic Kernel Image (GKI), essa configuração vem ativada por padrão desde android12-5.10
    • Dispositivos lançados com Android 12 ou superior e que usam Linux kernel 5.10 ou superior devem incluir kernel GKI
  • No ecossistema Android, atualizações de versão major do kernel são raras e, como o programa Google Requirements Freeze (GRF) permite certificar implementações antigas de fornecedores, alguns aparelhos atualizados para o Android 14 podem não oferecer suporte ao recurso de webcam USB
  • A forma mais direta de verificar o suporte é conferir a versão do kernel e se a configuração está ativada
    • Verificar a versão do kernel:
      • adb shell "cat /proc/version"
    • Verificar a configuração do kernel:
      • adb shell "zcat /proc/config.gz | grep 'CONFIG_USB_CONFIGFS_F_UVC'"
  • Como exemplo, o Galaxy Z Fold 5 rodando Android 13 usa android13-5.15 GKI e tem CONFIG_USB_CONFIGFS_F_UVC=y, então, ao ser atualizado para o Android 14, pode oferecer suporte ao recurso de webcam USB, desde que os outros pré-requisitos também sejam atendidos

App de sistema Webcam Service

  • Algumas versões beta do Android 14 QPR1 para certos aparelhos Pixel incluem um novo app de sistema chamado Webcam Service
    • O nome do pacote é com.android.deviceaswebcam
    • Ele depende da biblioteca compartilhada libjni_deviceAsWebcam.so
    • Esse app e essa biblioteca devem ser incluídos em um futuro lançamento do código-fonte do Android 14
  • O app Webcam Service implementa o serviço DeviceAsWebcam, que transforma o dispositivo Android em webcam
  • Esse serviço envia os frames da câmera para um nó /dev/video que o dispositivo host pode ler
  • Segundo a política SELinux, o nó /dev/video só pode ser acessado por processos no domínio device_as_webcam
    • Na prática, quem acessa é apenas o app de sistema Webcam Service
    • Por isso, o suporte nativo a webcam USB no Android 14 pode ser aproveitado pelo fabricante do dispositivo, mas não pode ser usado diretamente por apps de terceiros

Forma de iniciar a webcam USB e controles do usuário

  • Quando a nova opção USB webcam é ativada em USB Preferences, o sistema transmite o intent android.hardware.usb.action.USB_STATE
    • O intent inclui os extras connected e uvc
  • O Webcam Service tem um receiver que recebe esse intent
    • O extra uvc está definido como true
    • O método de framework android.hardware.usb#isUvcSupportEnabled() retorna true
    • Quando as duas condições são atendidas, o serviço do sistema é iniciado
  • isUvcSupportEnabled() retorna true quando a propriedade de sistema ro.usb.uvc.enabled está como true
    • Essa propriedade precisa ser definida pelo OEM no momento da build
    • Se ela não estiver definida, a opção USB webcam não aparece em USB Preferences e o Webcam Service também não é iniciado
    • Essa propriedade só pode ser lida por apps de sistema como Settings e Webcam Service
  • Quando o Webcam Service é iniciado, aparece uma nova notificação para o usuário configurar a webcam
    • Ao tocar na notificação, abre-se a pré-visualização da câmera
    • O usuário pode aplicar zoom in/out ou trocar de lente
  • Internamente, o app Webcam Service inicia um foreground service para evitar que o sistema o encerre
  • Ele usa a API Camera2 e oferece streaming em 720p (1280×720) ou 1080p (1920×1080)
  • No host conectado, o nome do dispositivo de webcam aparece como Android Webcam

ConfigFS e USB HAL

  • O nome exibido no host, os parâmetros de vídeo e a forma exata de codificação variam conforme o fabricante configura o UVC gadget via configfs
  • Em aparelhos Pixel baseados em Tensor, a configuração da função UVC gadget do Google está nos arquivos init.gs[101|201].usb.rc dentro de /vendor/etc/init/hw
  • Para que o Android mude o modo USB selecionado nas Settings para UVC, é necessário um USB HAL atualizado
  • Por causa do programa GRF, muitos aparelhos atualizados para o Android 14 provavelmente não receberão um USB HAL atualizado, e nesse caso o recurso não funcionará

Suporte de plataforma e limitações

  • Ao implementar um recurso nativo de webcam USB no Android, o Google permite que fabricantes interessados adotem essa funcionalidade
  • Se o app Webcam Service for incluído no AOSP como esperado, os fabricantes poderão usá-lo para implementar o recurso de webcam
  • Pode ser comparado ao Continuity Camera da Apple, mas a abordagem do Android funciona em várias plataformas
  • Telefones com Android 14 e que atendam aos requisitos podem se transformar em uma webcam USB padrão e ser usados em qualquer PC

1 comentários

 
GN⁺ 2023-09-23
Opiniões do Hacker News
  • O scrcpy já é excelente para esse uso: https://github.com/Genymobile/scrcpy
    Para transmitir a câmera do celular no OBS, basta esperar o dispositivo com adb, obter o IP de wlan0, conectar com adb tcpip 5555 e adb connect, e então executar scrcpy -e --v4l2-sink=/dev/video0 --lock-video-orientation=1 -n -N

    • scrcpy é realmente muito bom. Em breve deve entrar suporte nativo não para transmitir a captura da tela do app de câmera, mas para transmitir a câmera diretamente: https://github.com/Genymobile/scrcpy/pull/4213
      Se você puder compilar a partir do código-fonte, também adicionei commits extras em cima do PR, com suporte ao modo restrito de captura em alta velocidade do Android, permitindo streaming de câmera a 120fps/240fps. Não é lá muito útil para reuniões, mas é útil para capturar vídeo de VR de realidade mista em alta taxa de quadros. Até onde sei, não existe nenhum app de webcam para Android, proprietário ou open source, que passe de 60fps
    • Parece que o conjunto de ferramentas adb está bem completo, então gostaria de conselhos sobre duas coisas que ainda faltam do meu lado. Uma é como definir uma porta fixa para ADB/TCP ou encaminhá-la automaticamente para o PC, já que agora o Android muda a porta a cada vez. A outra é como ativar ADB/TCP em hotspot móvel, pois o Android reclama: “Please connect to WiFi”
      Tirando essas duas coisas, graças ao scrcpy, KDE Connect e Waydroid, a integração Linux-Android é quase perfeita, a ponto de até usuários da Apple ficarem com inveja
    • Será que também existe um jeito inverso, de ver a tela do computador em um dispositivo Android? Quero usar um dispositivo Android como controle remoto para apresentações em PDF, mas por enquanto, com o KDE Connect, consigo controlar, só que não consigo ver o slide atual no dispositivo Android — muito menos fazer anotações em tempo real
    • Recentemente virei usuário de MacOS ARM, e estou começando a notar pequenas infelicidades aqui e ali em que soluções como essa não se aplicam ao MacOS
  • Fugindo um pouco do assunto, durante o lockdown eu estava procurando uma forma de usar o iPhone como webcam e descobri o VDO.Ninja: https://vdo.ninja/
    No começo era uma forma de enviar o feed de vídeo para o OBS, e eu usava isso para montar uma entrada de webcam. Com o crescimento do projeto, ele também passou a servir para algo parecido com o Zoom, abrindo diretamente no navegador o compartilhamento de vídeo e áudio do desktop, o que permitiu organizar noites de cinema virtuais remotas
    Dá para fazer pela interface de criação de salas, mas configurar tudo só com parâmetros de URL era muito mais flexível e robusto: https://docs.vdo.ninja/master/how-does-it-work
    Ao criar URLs de remetente e destinatário, eles se conectam automaticamente via WebRTC. Por exemplo, dava para criar uma fonte que capturava uma janela do VLC e enviava vídeo e áudio, enquanto duas URLs de destino recebiam esse vídeo/áudio e também enviavam o áudio de seus microfones uma para a outra. Assim era possível assistir e ouvir um filme juntos no navegador e ainda conversar. Não tenho nenhuma relação com o projeto; só acho que ele é realmente excelente
    OBS é uma ferramenta usada para transmitir a tela do computador para lugares como a Twitch: https://obsproject.com/

    • Se você só tem um iPhone e nenhum outro dispositivo Apple, isso parece bom. Ainda assim, é bem estranho que os MacBooks ainda venham com câmera 1080p. Acho que não foi neste evento, mas em um evento anterior, eles demonstraram o uso do iPhone como câmera no FaceTime do desktop
    • Eu uso o app Elgato EpocCam para esse fim, e ele funciona perfeitamente de modo geral, inclusive com OBS: https://apps.apple.com/us/app/epoccam-webcamera-for-computer/id435355256
  • É um recurso novo bem-vindo. As empresas vêm investindo tempo e esforço para criar câmeras com recursos como rastreamento e modo retrato
    Ainda assim, parece ter chegado um pouco tarde em comparação com o momento da pandemia em que tudo virou remoto de repente e todo mundo estava desesperado atrás de webcams. Teria sido bom se tivessem oferecido esse recurso naquela época, em vez de nos fazer comprar apps de terceiros

    • Exato. Quando os lockdowns começaram a se tornar comuns, eu tinha certeza de que isso apareceria como algum app de projeto de 20% do tempo. A Wyze já tinha publicado, em março de 2020, uma forma de usar suas câmeras de segurança como webcam: https://www.theverge.com/2020/3/31/21202022/wyze-firmware-update-webcam-security-camera-transform-solution-guide
    • Tarde, mas melhor do que nunca. Comprei uma webcam naquela época, mas ainda assim é bem provável que a qualidade de imagem do celular seja muito melhor
    • Isso também é uma troca. Você ganha algumas coisas, mas junto vem o processo de produto bagunçado do Google
  • Para mim, foi pouco demais e tarde demais. Não quero ser o tipo de pessoa que solta esse tipo de “hot take”, mas, ouvindo um pouco: até 2013 eu só usava telefone fixo, sem celular, comecei com um Nexus 4 e fui trocando a cada 2 ou 3 anos até chegar ao Pixel 6. Só que amanhã meu primeiro iPhone chega
    Há muitos motivos. Não dá para conectar um celular do Google a um monitor externo e espelhar a tela, e a saída DisplayPort está explicitamente desativada no código-fonte sem motivo: https://twitter.com/MishaalRahman/status/1189998588023234560 É um recurso que funciona bem em outros celulares
    Também não dá para acessar as mensagens de texto de um celular Android sem um app separado. Tentei adb backup, mas não funciona; talvez dê com root, mas pelo que sei o processo de root normalmente apaga tudo
    Também não dá para acessar o backup do celular. Ele fica salvo apenas nos servidores do Google, e a única forma de chegar perto disso é restaurando em um telefone. Tenho fisicamente na mão um aparelho que comprei, mas não consigo acessar tudo que há nele. No iPhone, dá para conectar no Windows ou no Mac e despejar o backup no computador, e ele inclui mensagens, configurações do sistema, contatos, fotos, bancos de dados, quase tudo. Talvez a exceção sejam coisas como chaves de proteção de hardware
    Nem preciso falar das palhaçadas do Google. A bagunça de mensageiros, o encerramento de vários serviços, o suporte insuficiente, uma integração mais forte com anúncios e rastreamento, coisas assim. A Apple também não é perfeita, mas sinto que vale a pena entrar por um tempo no jardim murado. No iOS há saída de vídeo, acesso ao próprio aparelho, mensagens que fazem sentido e pelo menos a sensação de que se importam com privacidade. Paradoxalmente, sinto que tenho mais controle usando produtos da Apple do que produtos do Google

    • Eu alterno entre os dois lados a cada alguns anos e agora uso um iPhone 14. Sinceramente, o Android faz muitas coisas melhor. O iOS tem restrições idiotas demais que existem “porque é Apple”
      Por exemplo, não dá para saber a velocidade de carregamento nem o tempo estimado de carga, então é difícil confirmar se escolhi, entre vários carregadores, um carregador rápido e cabo compatíveis com o iPhone; e, mesmo com Chrome ou Firefox instalados, se você seleciona um texto e toca em pesquisar na web, ele vai para o Safari. Há muitas pequenas irritações desse tipo, e o sistema operacional é tão fechado que não há o que fazer
      O Android é muito mais fácil de personalizar, e sideload, como rodar um emulador de GBA no iPhone, também é mais fácil. Há aparelhos mais interessantes no ecossistema Android, como os flip phones da Samsung. A integração do ecossistema com o Mac é boa, mas é difícil dizer que um lado é claramente melhor
    • No Pixel 8, parece que o problema da saída DisplayPort vai mudar. E os problemas de acesso a mensagens de texto ou ao backup do celular não se aplicam a todos os celulares Android
      Nenhum dos serviços que o Google matou me afetou, e nem sei bem a que se referem com a bagunça de mensageiros. Também não está claro que tipo de suporte estaria faltando
    • Uso celulares Android desde 2009 e estou pensando bem seriamente em mudar para a Apple no próximo aparelho. Além dos motivos mencionados, o ecossistema é realmente bagunçado. Nos últimos 10 anos comprei apenas Nexus/Pixel, mas continuei decepcionado com o desempenho
      O Pixel 1 XL era excelente, mas depois de uns 2 anos a câmera começou a falhar constantemente, levava mais de 3 segundos para abrir ou travava com frequência. No fim, a bateria piorou, e a bateria de reposição também se degradou em poucos meses, então troquei
      O Pixel 3a caiu do meu bolso e quebrou dois meses antes do fim das atualizações de segurança. No geral era um bom telefone, mas o Google não deu suporte por tanto tempo quanto eu esperava. O Pixel 6 Pro está bom até agora, mas o Pixel 5 da minha esposa tem problemas como desempenho lento e conexão celular instável
      Talvez a lição seja “não compre celulares Pixel”, mas as alternativas podem ser um pesadelo ainda maior em termos de segurança. Os celulares Galaxy vinham com uma quantidade inacreditável de apps lixo pré-instalados para remover. No Pixel há apenas apps do Google e a maioria pode ser removida, então as preocupações de privacidade e segurança são menores do que ter apps de 30 empresas pré-instalados, talvez impossíveis de apagar
      Critiquei muito a Apple ao longo dos anos, então é decepcionante que, no fim, trocar de plataforma pareça ser a melhor opção
    • A bagunça de mensageiros é dolorosa, mas acho melhor do que um mensageiro que só ricos podem usar. Ao escolher a Apple, você acaba entrando nesse tipo de mensageiro
      Algumas inconveniências parecem bem irritantes, mas não a ponto de eu aceitar a restrição de pagar uma assinatura recorrente para escrever código no computador que eu quiser e executá-lo no meu telefone ou no telefone de amigos, tendo que submetê-lo a um revisor que pode recusá-lo por qualquer motivo
    • Pelo que parece, os problemas são principalmente com o Google e aparelhos do Google. Pessoalmente, estou bastante satisfeito com um Fairphone 4 rodando LineageOS. A Murena também vende diretamente aparelhos deGoogleizados com /e/
      Nesses sistemas, é possível ter acesso adb como root, e com isso também acessar o banco de dados SQLite das mensagens. O espelhamento de tela via modo alternativo DP do USB-C funciona por padrão, e também dá para ativar o “modo desktop” do Android, embora ele ainda seja bem básico e experimental
      A Fairphone oferece suporte por bastante tempo, é fácil de consertar e também consegue rodar kernel mainline (postmarketOS etc.). Claro que, do ponto de vista do sistema operacional, qualquer celular Android ainda depende do Google
      Concordo com muitas críticas ao Google, mas ir para a Apple parece trocar um mal por outro. Eu jamais chamaria um telefone da Apple de “meu”, e também não sinto que a Apple ofereça “acesso ao próprio aparelho”
  • Uso o app Camo há mais de um ano. Funciona muito bem e também permite ver a câmera por Wi‑Fi, então não precisa de cabo. A conta básica é gratuita: https://reincubate.com/camo/

    • Eu também gostava e paguei por alguns meses, mas de vez em quando surgia uma latência de cerca de 1000 ms. A única solução era reinstalar o driver no Windows. Aconteceu mais de uma vez, tanto com iPhone quanto com aparelho Android, e como não havia solução melhor, cancelei
    • Concordo. Uso o Camo diariamente há anos para transformar um iPhone 7 antigo em webcam, e ele entrega uma imagem muito melhor do que uma webcam comum
  • Isso já existia há alguns anos. Não sei em que sentido ainda não havia suporte

    • O OBS e o DroidCam standalone já fazem isso com um app Android e um app para PC. Fico curioso se isto é uma integração desses apps ou algo parecido
    • Talvez só fosse possível em determinados dispositivos. No meu aparelho não há opção UVC nas configurações de USB. Existem alternativas como o IP Webcam
  • Com esse recurso, o Pixel 6a, que hoje custa 250 dólares, tem grande chance de se tornar a webcam com melhor custo-benefício do mercado

    • Se você puder esperar 6 meses, dá para consegui-lo por cerca de 90 dólares abrindo uma nova linha na Metro by T-Mobile e comprando o Pixel 6a com o desconto de nova linha. O telefone sai por 50 dólares, o primeiro mês do plano por 40 dólares, e basta não renovar no segundo mês
      Li em algum site de promoções extremamente irritante que, depois de 6 meses, o bloqueio de operadora é removido automaticamente. Não vou linkar porque esse site é irritante demais. Para iniciar o contador de 6 meses, é obrigatório ativar o telefone
    • Depois do evento do Pixel 8 em 4 de outubro, acho que o preço do Pixel 6a vai cair ainda mais
  • Pelo que sei, no Nokia N900 isso já era possível em 2009 com gstreamer. Eu não cheguei a criar e usar um dispositivo de vídeo de fato, mas imagino que o v4l2sink já existisse naquela época. Usei várias vezes para fazer streaming com uma janela remota e OpenCV
    Foi o único telefone realmente bom que já tive. Seria ótimo se em dispositivos Android as coisas fossem tão fáceis assim, mas, curiosamente, quase nunca são

    • Gosto muito de dispositivos e softwares que enfatizam possibilidades e flexibilidade. Sistemas modernos de consumo colocam guardrails muito fortes para que o usuário tenha uma experiência simples, e a estrutura também é rígida e enorme
      Isso também é difícil e merece respeito. Mas tenho a impressão de que essa visão dura e conservadora sobre software dominou completamente, por muito tempo, as coisas que vêm sendo criadas. Há cada vez menos computação que tente dar uma base sólida para power users. A tecnologia continua se distanciando e ficando mais obscura. Ironicamente, porque continuamos perdendo as rampas de entrada para quem quer se aprofundar e virar especialista ou explorador
    • Na verdade, isso também era possível em dispositivos Symbian ainda mais antigos
  • Seria bom poder usar um telefone Android como dashcam. Quando isso vai ser possível? Parece uma função que obviamente deveria existir

    • Há apps de dashcam na Play Store
    • Acho que ele tenderia a superaquecer
    • Não sei o que uma dashcam faz de diferente de uma câmera comum. Por que não bastaria simplesmente apertar o botão de gravar?
  • É um recurso bom de ter, mas acho que a maioria das pessoas ainda vai querer ficar com o celular em mãos durante uma chamada no Zoom. Ainda assim, talvez muita gente tenha um telefone sobrando

    • Fico curioso sobre o que as pessoas fazem no celular durante uma chamada no Zoom. Não estou dizendo que seja errado ou estranho; é só que eu não faço isso e gostaria de entender como outras pessoas usam software e computadores