Android 14-QPR1 veya sonraki sürümleri çalıştıran cihazlar için Android,
cihazı USB web kamerası olarak kullanın. Bu özelliği destekleyen Android cihazlarda reklam yayınlanır
UVC cihazı olarak da kullanılabilir; bu da farklı özelliklere sahip çok çeşitli USB ana makinelerine olanak tanır
işletim sistemlerinde (örneğin, Linux, macOS, Windows ve ChromeOS)
kamera olarak kullanabilirsiniz. DeviceAsWebcam
hizmeti
, cihazı web kamerası olarak kullanmak için bu özelliği destekler.
DeviceAsWeb kamerası hizmeti
AOSP'deki DeviceAsWebcam
hizmeti bir önizleme etkinliği içerir
(DeviceAsWebcamPreview.java
) içerir. Önizleme
etkinliği kullanıcının aşağıdakileri yapmasına olanak tanır:
Yayından önce web kamerası feed'inin ana makinede nasıl görüneceğini önizleyin başlar.
Ana makineye gönderilen web kamerası feed'ini aşağıdaki şekillerde özelleştirebilirsiniz:
- Önde veya arkada olacak şekilde yayın yapmak için kamerayı seçme
- Kaydırma çubuğu veya düğmeler kullanarak yakınlaştırma düzeyini seçin.
- Odaklanmak veya odağı kaldırmak için önizlemenin belirli bir bölgesine dokunma olduğunu görebilirsiniz.
Önizleme etkinliği, Android'deki genel erişilebilirlik özellikleriyle çalışır. TalkBack, Anahtar Erişimi ve Sesli Erişim.
Şekil 1. Ana makineye akışla aktarılan web kamerası özet akışı ile feed'i seçin.
Mimari
Bir cihazın web kamerası olarak kullanılmasını destekleyecek mimari
Şekil 2. Aşağıda DeviceAsWebcam
öğesinin etkileşim akışı açıklanmaktadır
hizmet:
- Kullanıcı, Ayarlar uygulamasında USB web kamerası seçeneğini belirler.
- Ayarlar uygulaması,
system_server
FUNCTION_UVC
adlıUsbManager
sınıfının seçildiğini bildiriyor. - Sistem sunucusu şunları yapar:
- UVC aygıt işlevini bir
setUsbFunctions
HAL arayüzü çağrısı. - UVC aygıt sürücüsünü ConfigF'ler.
- UVC aygıt işlevini bir
- Aygıt HAL'sinden çağrı aldıktan sonra,
system_server
,DeviceAsWebcam
hizmeti tarafından alınacak çerçeveye yayınlamanız gerekir. - USB aygıt sürücüsü, yapılandırma alındığında web kamerası akışını başlatır
ana makineden V4L2 düğümlerine
/dev/video*
konumundaki komutlar.
Şekil 2. DeviceAsWeb kamerası mimarisi.
Uygulama
Bu bölümde, Android cihazları web kamerası olarak kullanma konusunda destek açıklanmaktadır.
Kernel desteği
Android 14 veya sonraki sürümlerde Genel Kernel Görüntüsü (GKI), UVC widget'ını etkinleştirir. sürücüsünü varsayılan olarak güncelleyin (ayrıntıları AOSP yamasında bulabilirsiniz).
Gadget HAL'de UVC desteği
UVC işlevi, Android 14 sürümünden itibaren
GadgetFunction.aidl
HAL arayüzü. Gadget HAL için UVC
gibi diğer ConfigFS işlevleriyle aynı şekilde ConfigFS'e eklenir ve
MTP veya ADB olarak kullanma.
Aygıt HAL'sini uygulamak için UVC işlevini ConfigFS'dir. Aşağıda, bir Gadget HAL uygulamasının örnek snippet'i gösterilmektedir destekleyici UVC işlevini destekler:
UsbGadget::setCurrentUsbFunctions(long functions) {
...
// Existing functions
if ((functions & GadgetFunction::MTP) != 0) {
...
linkFunction("ffs.mtp"); // Mount to ConfigFS
...
}
...
// UVC function follows the same pattern!
if ((functions & GadgetFunction::UVC) != 0) {
...
linkFunction("uvc.0"); // Mount to ConfigFS
...
}
...
}
Cihaz bir web kamerası gibi çalışırken USB cihaz HAL'sinin reklam yaptığından emin olun doğru VID/PID kombinasyonlarını belirleme.
Tüm UVC mantığı, tedarikçi firmanın init'inde veya DeviceAsWebcam
içinde yer alır.
işlevini kullanın, UVC işlevini
ConfigFS, Aygıt HAL'de gereklidir.
Uygulama hakkında daha fazla yardım için AOSP'de aşağıdaki örnek koda bakın:
UVC yapılandırmalarıyla ConfigFS'i ayarlama
UVC aygıt sürücüsüne hangi biçimlerin, boyutların ve kare hızlarının tarafından desteklendiğinden, UVC yapılandırmaları içeren ConfigFS'i ayarlayın. Örneğin, Daha fazla bilgi için ConfigFS UVC'sinde yukarı akış Linux dokümanlarını inceleyin araç ABI'sı hakkında daha fazla bilgi edinin.
Aşağıda, tedarikçi firmanın başlangıç noktasının UVC araç sürücüsünü nasıl ayarlayabileceğine dair bir örnek verilmiştir. (AOSP'de kod snippet'i):
# uvc function
mkdir /configfs_path/functions/uvc.0
write /configfs_path/functions/uvc.0/function_name "Android Webcam"
write /configfs_path/functions/uvc.0/streaming_maxpacket 3072
# setup control params
mkdir /configfs_path/functions/uvc.0/control/header/h
symlink /configfs_path/functions/uvc.0/control/header/h \
/configfs_path/functions/uvc.0/control/class/fs/h
symlink /configfs_path/functions/uvc.0/control/header/h \
/configfs_path/functions/uvc.0/control/class/ss/h
# advertise 1080p resolution for webcam encoded as mjpeg
mkdir /configfs_path/functions/uvc.0/streaming/mjpeg/m/1080p
write /configfs_path/functions/uvc.0/streaming/mjpeg/m/1080p/wHeight 1080
write /configfs_path/functions/uvc.0/streaming/mjpeg/m/1080p/wWidth 1920
write /configfs_path/functions/uvc.0/streaming/mjpeg/m/1080p/dwMaxVideoFrameBufferSize 4147200
# advertise 30 fps support for 1080p.
write /configfs_path/functions/uvc.0/streaming/mjpeg/m/1080p/dwDefaultFrameInterval 333333
write /configfs_path/functions/uvc.0/streaming/mjpeg/m/1080p/dwFrameInterval "333333"
# setup streaming params
mkdir /configfs_path/functions/uvc.0/streaming/header/h
symlink /configfs_path/functions/uvc.0/streaming/mjpeg/m \
/configfs_path/functions/uvc.0/streaming/header/h/m
symlink /configfs_path/functions/uvc.0/streaming/header/h \
/configfs_path/functions/uvc.0/streaming/class/fs/h
symlink /configfs_path/functions/uvc.0/streaming/header/h \
/configfs_path/functions/uvc.0/streaming/class/hs/h
symlink /configfs_path/functions/uvc.0/streaming/header/h \
/config/usb_gadget/g1/functions/uvc.0/streaming/class/ss/h
# ...
Bu snippet, UVC aygıt sürücüsünü 30 fps. Bu özellikler, sorgu işlemi gerçekleştirdiğinde USB ana makinesine iletilir desteklenen çözünürlükleri ve kare hızlarını
Aşağıda, web kamerası yapılandırmaları seçmek için genel yönergeler verilmiştir reklam:
DeviceAsWebcam
hizmeti tarafından desteklenen iki akış biçimi MJPEG ve Sıkıştırılmamış YUYV'dir.- USB 2.0, 480 Mb/sn (60 MB/sn) veri aktarımını destekler. Bu
30 fps'de her karenin maksimum 2 MB boyutunun olması gerektiği anlamına gelir;
60 fps'de maksimum 1 MB boyutunda.
- Sıkıştırılmamış akışlar (YUYV): 30 fps'de, desteklenen maksimum kare boyut 720p'dir çünkü YUYV piksel başına 2 bayttır.
- Sıkıştırılmış MJPEG akışları: YUV'den 1:10 sıkıştırma oranı olduğu varsayıldığında, USB 2.0, 4K'yı (kare başına 1,18 MB) destekleyebilir.
- Birincil ön ve arka kamera cihazları, reklamı yapılıyor. Çünkü kullanıcı şunu kullanarak kamera kimlikleri arasında geçiş yapabilir: önizleme kullanıcı arayüzü. MJPEG akışları için satıcıların 480p (640 x 480), 720p (1280 x 820) ve 1080p (1920 x 1080) çerçeve boyutları ana makine uygulamaları tarafından yaygın olarak kullanılan boyutlara ilişkin bir örnektir.
- Birincil ön ve arka kamera cihazları, şuna uyan tüm kare hızlarını desteklemelidir: reklamı yapılan üründür. Satıcıların 30 fps'yi desteklemesini önemle tavsiye ederiz.
Web kamerası akış yapılandırmaları (ConfigFS) ekleme örneği için bkz. AOSP örnek yaması.
Derlemede web kamerasını etkinleştir
DeviceAsWebcam
hizmetini etkinleştirmek için ro.usb.uvc.enabled
ayarını yapmanız gerekir
sistem özelliğini device.mk
dosyasında true
olarak ayarlayın.
# Enable UVC support
PRODUCT_VENDOR_PROPERTIES += \
ro.usb.uvc.enabled=true
Bu sistem özelliği etkinleştirildiğinde Web kamerası seçeneği Ayarlar uygulamasına (Şekil 3'te gösterildiği gibi) gidin. Seçenek seçildiğinde, Android cihaz ana cihaza bir USB web kamerası olarak görünür.
Şekil 3. Ayarlar uygulamasındaki USB tercihleri.
Ayrıca, bunu kullanarak cihazı ADB üzerinden USB web kamerası işlevine ayarlayabilirsiniz komut:
adb shell svc usb setFunctions uvc
Güç ve ısı ile ilgili endişeleri değerlendirin
Web kamerası işlemleri, bir cihazın kamerasının birden fazla kişi için açık olabileceği anlamına gelir saatlere ihtiyaç duyuyoruz. Bu yüzden, elektriğin tamamen tüketim ve ısısı belirli sınırların altında kalır. İlgili içeriği oluşturmak için kullanılan aşağıda güç tüketimini sınırın altında tutmak için önerilen çözümler yer almaktadır:
- Kamera donanım soyutlama katmanından daha iyi güç performansı almak için
DeviceAsWebcam
hizmetindeSTREAM_USE_CASE_VIDEO_CALL
. STREAM_USE_CASE_VIDEO_CALL
etkinken bile güçle ilgili bir sorun söz konusuysaDeviceAsWebcam
hizmeti, gücü daha da azaltma seçeneği sunar tüketim elde etti. Tekliflerinizi otomatikleştirmek ve optimize etmek için çalışma zamanı kaynak yer paylaşımları (RRO'lar) pek de iyi olmadığını unutmayın. Fiziksel yayınlar, video kalitesini önemli ölçüde düşürerek kafa karıştırıcı bir kullanıcı deneyimi olduğundan bu çözümü yalnızca son çare olarak kullanın. Optimize ediliyor Güç kaynağı için tercih edilen çözümSTREAM_USE_CASE_VIDEO_CALL
emin olun.DeviceAsWebcam
tarafından desteklenen DGR'ler hakkında daha fazla bilgi hizmeti için readme.md dosyasına bakın.Aşağıda, fiziksel kamera kimliği 3'ü kullanmak üzere ayarlanan bir RRO örneği verilmiştir yerine mantıksal kamera kimliği 0 olması gerekir. AOSP'deki bir örnek için bkz. DeviceAsWebcamRaven.
// For logical camera id 0 - use physical camera id 3 {"0": {"3" : "UW"}}
Doğrulama
DeviceAsWebcam
hizmetini cihazınızda nasıl uygulayacağınızı test etmek için
aşağıdaki testler:
- CTS doğrulayıcı testi web kamerası: Biçimlerin, boyutların ve cihazın kare hızlarını desteklemesi.
- Manuel testler: Web kamerası özelliğinin çeşitli ana makine uygulamalarıyla çalışıp çalışmadığını test etme çeşitli ana makine işletim sistemlerinde çalışır.
Bilinen sorunlar
DeviceAsWebcam
hizmetiyle ilgili bilinen sorunlar aşağıda belirtilmiştir:
UVC aygıtı sürücüsünün akışı bazen titriyor ve nasıl göründüğünü gösterir. Bu sorun düzeltildi ve birleştirildi GKI'da görebilirsiniz.
Web kamerası modundaki Android cihazlar USB 3.0+ kablolarla çalışmaz macOS ana makinelerinde, Apple'ın UVC sürücüsüyle ilgili bir hata oluştu.