Android platformu, tak-çalıştır USB kameraların (yani web kameraları) kullanan, standart Android Camera2 API'si ve kamera HAL kullanır. Web kameraları genellikle USB video sınıfı (UVC) ve Linux'ta ise standart Video4Linux (V4L) sürücüsü, UVC kameraları kontrol etmek için kullanılır.
Web kamerası desteğiyle cihazlar, aşağıdaki gibi hafif kullanım alanlarında kullanılabilir: görüntülü sohbet ve fotoğraf kioskları. Bu özellik, standart dahili reklam sistemlerinin yerine kamera HAL'leri içerir ve yüksek çözünürlüklü ve karmaşık çözümler içeren karmaşık görevleri Yüksek hızlı akış, AR ve manuel İSS/sensör/lens kontrolü.
USB kamera HAL işlemi, USB cihaz kullanılabilirliğini dinler ve harici kamera cihazlarını numaralandırır buna göre hazırlar. Bu işlem aşağıdakine benzer izinlere ve bir SE politikasına sahiptir: yerleşik kamera HAL işlemidir. İletişim kuran üçüncü taraf web kamerası uygulamaları UVC'ye erişmek için aynı kamera izinlerini gerektirir. kamera uygulamalarında olduğu gibi.
Örnekler ve kaynaklar
USB kameraların nasıl uygulanacağı hakkında daha fazla bilgi için bkz. harici kamera
sağlayıcı referans uygulaması
ExternalCameraProvider
.
Harici kamera cihazı ve oturum uygulamaları
ExternalCameraDevice
ve
ExternalCameraDeviceSession
.
API düzeyi 28'den itibaren Java istemci API'si
EXTERNAL
kullanabilirsiniz.
Uygulama
Uygulama,
android.hardware.usb.host
yeni bir sistem işlevinden bahsedeceğiz.
UVC cihazları için çekirdek desteği de etkinleştirilmelidir. Bu özelliği şu şekilde etkinleştirebilirsiniz:
ilgili çekirdek defconfig
dosyalarına aşağıdakini ekleyerek.
+CONFIG_USB_VIDEO_CLASS=y
+CONFIG_MEDIA_USB_SUPPORT=y
İlgili cihaz derlemesinde harici kamera sağlayıcısını etkinleştirmek için gerekli SELinux izinlerini, harici kamera yapılandırmasını ve harici kamera sağlayıcısına bağlıysanız aşağıdaki adımları tamamlayın:
Harici kamera yapılandırma dosyasını ve harici kamera kitaplığını şuraya ekleyin:
device.mk
+PRODUCT_PACKAGES += android.hardware.camera.provider-V1-external-service +PRODUCT_COPY_FILES += \ +device/manufacturerX/productY/external_camera_config.xml:$(TARGET_COPY_OUT_VENDOR)/etc/external_camera_config.xml
Harici kamera sağlayıcısının adını, cihazın Treble HAL manifestine ekleyin.
<hal format="aidl"> <name>android.hardware.camera.provider</name> <version>1</version> <interface> <name>ICameraProvider</name> <instance>internal/0</instance> + <instance>external/0</instance> </interface> </hal>
(İsteğe bağlı) Cihaz Tiz geçiş modunda çalışıyorsa
sepolicy
uygulamasını güncelleyin Böylececameraserver
, UVC kamerasına erişebilir.+# for external camera +allow cameraserver device:dir r_dir_perms; +allow cameraserver video_device:dir r_dir_perms; +allow cameraserver video_device:chr_file rw_file_perms;
external_camera_config.xml
örneğini burada bulabilirsiniz (telif hakkı satırları atlanmıştır).
<ExternalCamera> <Provider> <ignore> <!-- Internal video devices to be ignored by external camera HAL --> <id>0</id> <!-- No leading/trailing spaces --> <id>1</id> </ignore> </Provider> <!-- See ExternalCameraUtils.cpp for default values of Device configurations below --> <Device> <!-- Max JPEG buffer size in bytes--> <MaxJpegBufferSize bytes="3145728"/> <!-- 3MB (~= 1080p YUV420) --> <!-- Size of v4l2 buffer queue when streaming >= 30fps --> <!-- Larger value: more request can be cached pipeline (less janky) --> <!-- Smaller value: use less memory --> <NumVideoBuffers count="4"/> <!-- Size of v4l2 buffer queue when streaming < 30fps --> <NumStillBuffers count="2"/> <!-- List of maximum fps for various output sizes --> <!-- Any image size smaller than the size listed in Limit row will report fps (as minimum frame duration) up to the fpsBound value. --> <FpsList> <!-- width/height must be increasing, fpsBound must be decreasing--> <Limit width="640" height="480" fpsBound="30.0"/> <Limit width="1280" height="720" fpsBound="15.0"/> <Limit width="1920" height="1080" fpsBound="10.0"/> <!-- image size larger than the last entry will not be supported--> </FpsList> </Device> </ExternalCamera>
Özelleştirme
Android kamerasını genel özelleştirme seçenekleriyle geliştirebilirsiniz optimizasyon yapabilirsiniz.
Genel özelleştirmeler
Şu değişiklikleri yaparak harici kamera sağlayıcısını özelleştirebilirsiniz:
external_camera_config.xml
dosyası yükleyin. Özellikle, müşteriler
şu parametrelere sahiptir:
- Dahili kameraların video düğümleri hariç
- Desteklenen resim boyutu ve kare hızı üst sınırı
- Yayın sırasındaki arabellek sayısı (takıntı - bellek dengesi)
Bu parametrelere ek olarak kendi parametrelerinizi ekleyebilir veya izin verir.
Cihaza özel optimizasyonlar
Ayrıca, cihaza özel optimizasyonlar ekleyerek performansı artırabilirsiniz.
Arabellek kopyalama/ölçeklendirme ve JPEG kodu çözme/kodlama
Genel uygulamalar CPU (libyuv/libjpeg) kullanır, ancak bunu optimize edebilirsiniz.
HAL çıkış biçimi
Genel uygulamalar aşağıdaki çıkış biçimlerini kullanır:
- Video
IMPLEMENTATION_DEFINED
arabellekleri içinYUV_420_888
- Diğer tüm
IMPLEMENTATION_DEFINED
arabellekleri içinYUV12
Performansı artırmak için çıkış biçimlerini cihaza özel çıkış biçimleriyle değiştirebilirsiniz. etkili biçimlerdir. Ayrıca, özelleştirilmiş bir biçimde ek biçimleri de destekleyebilirsiniz uygulama
Doğrulama
Harici kamera desteği olan cihazlar kamera CTS'si kullanır. Harici USB Web kamerası test çalıştırması boyunca belirli bir cihaza bağlı kalmalıdır. Aksi takdirde bazı test durumları başarısız olur.