Dashcam uygulaması, AAOS ile entegre olacak şekilde tasarlanmıştır. Böylece sürücülere, güvenliği ve emniyeti artırmak için video kaydı özellikleri sunar. Bu kılavuzda, başarılı bir uygulama için teknik koşullar, entegrasyon adımları ve en iyi uygulamalar özetlenmiştir.
Ön koşullar
Devam etmeden önce aşağıdaki ön koşulların karşılandığından emin olun:
SDK:
- SDK 31 veya daha yeni bir sürüm gerekir.
Donanım:
- AAOS'te kullanılabilen EVS veya Camera2 kameralar.
- Video kayıtları için yeterli dahili depolama alanı veya çıkarılabilir harici depolama desteği
olmalıdır.
Yazılım gereksinimleri:
- Ayrı destek. Daha fazla bilgi edinmek için Paketlenmemiş Uygulamalar başlıklı makaleyi inceleyin.
- İzinler. Dashcam için sistem izinleri gerekir.
Kaynak kodu alma
Dashcam, AAOS'in paketlenmemiş uygulamalarından biridir. Paketinden çıkarılmış kodu incelemek için Kodu inceleme başlıklı makaleyi inceleyin.
Android Code Search ile kaynak koduna göz atın.
Kaynak kodu şu üç modülde sağlanır:
- Araç Kamerası Hizmeti. Yayınlama, kaydetme ve tetikleme mantığı.
- Dashcam Yöneticisi Araç kamerası hizmetine bağlanır ve istemcilere kararlı bir API sunar.
- Dashcam uygulaması. Dashcam Manager API'yi kullanan referans Dashcam uygulaması
Dashcam'i kurma
Dashcam'i oluşturmak için Soong veya Gradle'ı kullanın.
Soong
Soong'da:
mma DashcamService DashcamManager-lib DashcamApp
APK'lar out/target/product/[lunch-target]/system/priv-app/ konumunda bulunuyor.
Gradle
Gradle'da:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
APK'lar out/aaos-apps-gradle-build/ konumunda bulunuyor.
Gradle ile araç içi kamera oluşturmayla ilgili ayrıntılı talimatlar README dosyasında verilmiştir.
İzinler
Dashcam Hizmeti ve Dashcam Uygulaması için çeşitli sistem izinleri gerekir.
Bu izinleri vermenin en basit yolu, Blueprint veya Make'i kullanarak önceden oluşturulmuş bir kuruluma dahil etmektir.
Blueprint'te:
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
prebuilt_etc {
name: "allowed_privapp_com.android.car.dashcam",
sub_dir: "default-permissions",
src: "allowed_privapp_com.android.car.dashcam.xml",
filename_from_src: true,
}
Make'te:
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/Dashcam/allowed_privapp_com.android.car.dashcam:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.android.car.dashcam.xml \
allowed_privapp_com.android.car.dashcam.xml adlı bir izin dosyası oluşturun:
<permissions>
<privapp-permissions package="com.android.car.dashcam.service">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
Manifest dosyasındaki izinleri izin dosyasına ekleyin.
Dashcam'i kullanmadan önce AAOS Camera'da gösterildiği gibi Dashcam Hizmeti'ne Camera2 izinlerini önceden verin.
Önceden verilmiş izinler dosyasını, izinler dosyasıyla aynı şekilde Blueprint veya Make dosyasına ekleyin.
pre-grant-permissions-com.android.car.dashcam.xml içinde:
<exceptions>
<exception package="com.android.car.dashcam.service">
<permission name="android.permission.CAMERA" fixed="false" />
<permission name="android.permission.SYSTEM_CAMERA" fixed="false" />
<permission name="android.permission.CAMERA_HEADLESS_SYSTEM_USER" fixed="false" />
</exception>
</exceptions>
Android.bp içinde:
...
required["pre-grant-permissions-com.android.car.dashcaml"]
...
prebuilt_etc {
name: "pre-grant-permissions-com.android.car.dashcaml",
sub_dir: "default-permissions",
src: "pre-grant-permissions-com.android.car.dashcam.xml",
filename_from_src: true,
}
Daha fazla bilgi edinmek için Önceden oluşturulmuş bir derlemeyi sistem görüntüsüne entegre etme ve İzin verilenler listesi ekleme başlıklı makaleleri inceleyin.
Başka cihazdan yükleme
İzinler dosyası yan yükleme yöntemiyle de yüklenebilir. Hazır Dashcam yapılandırılmadığında bu yöntemi kullanın.
Daha önce önceden oluşturulmuş öğeler bölümünde oluşturulan izinler dosyasını kullanarak şu komutu çalıştırın:
adb root
adb remount
adb push allowed_privapp_com.android.car.dashcam.xml /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
adb shell chmod 644 /etc/permissions/allowed_privapp_com.android.car.dashcam.xml
Önceden verilmiş izinler dosyasını etc/default-permissions/'ya benzer şekilde ekleyin.
Yer paylaşımlarını yapılandırma
Araç kamerası hizmetinde yer paylaşımı yapılabilen yapılandırmalar bulunur.
Hizmet yapılandırması
dashcam-service/res/values/config.xml
Bu dosya, hizmetin yapılandırmalarını içerir:
config_file/assetsiçindeki tetikleyici yapılandırma dosyasının adıallow_internal_storageKayıtların dahili depolama alanına kaydedilmesine izin verboot_startup_enabledCihaz açıldığında Dashcam hizmetinin başlatılmasınotifications_onKayıt başladığında bildirimleri gösterdefault_app_componentKüresel kayıt erişimi ve küresel tetikleme erişimi olan varsayılan araç kamerası uygulamasırecording_moduleComponentName ofIRecordingModuleimplementationstreaming_moduleComponentName ofIStreamingModuleimplementationtrigger_moduleComponentName ofITriggerModuleimplementation
Tetikleyici yapılandırması
Kayıt tetikleyicilerini yapılandırmak için aşağıdakilerin bir kopyasını oluşturun:
dashcam-service/src/assets/config.xml
ve bunu öğeler dizinine ekleyin. Hizmet yapılandırma dosyasındaki config_file öğesinde bu dosyayı işaret edin.
Tetikleyici yapılandırması depolama, kamera ve tetikleyici bölümlerinden oluşur:
Depolama
Depolama yapılandırması aşağıdaki öğeleri içerir:
maxStorageUsagePercentKayıtları budamadan önce araç kamerasının kullandığı maksimum kullanılabilir depolama alanı yüzdesi.maxStorageUsageMegabytesKayıtları temizlemeden önce araç kamerasının kullandığı maksimum depolama alanı miktarı (megabayt).maxAgeHoursBeforePruneKayıtların kırpılmadan önceki maksimum süresi. Depolama alanı sınırlarına ulaşılırsa kayıtlar daha erken budanabilir.
Kamera
Kamera yapılandırması aşağıdaki öğeleri içerir:
Kamera kimliği. Kamera önekiyle birlikte kameranın kimliği.
prerollLengthMsHer etkinlikle birlikte depolanacak ön rulo uzunluğu.widthKamera tarafından döndürülen arabelleğin isteğe bağlı genişliği.heightKameranın döndürdüğü arabelleğin isteğe bağlı yüksekliği.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
Bu örnekte, 1080p çözünürlükte 10 saniyelik bir ön rulo içeren EVS:1 kamera kimliği ve 10 saniyelik bir ön rulo ile varsayılan genişlik ve yüksekliğe sahip Camera2:1 kamera kimliği gösterilmektedir.
Tetikleyici
Tetikleyici yapılandırması, aşağıdakilerle tanımlanan bir tetikleyici listesinden oluşur:
nameBenzersiz tetikleyici adı.camerasKameraların kimlikleri.sensorPropertyIDSensör grubunun önek olarak eklendiği sensörün kimliği. Önek seçenekleriVHALveyaSENSOR_MANAGER'dir.descriptionKullanıcı arayüzünde gösterilen tetikleyicinin açıklaması.recordingLengthMsEtkinlikten sonra kaydedilecek süre (milisaniye cinsinden).sensorValueTypeSensörün ürettiği veri türü. Seçenekler şunlardır:INT,INT_ARRAY,FLOAT,FLOAT_ARRAYveBOOLEAN, STRING.thresholdTypeSensör değerinithresholdValueile nasıl karşılaştırabilirsiniz? Seçenekler şunlardır:AVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKvePEAK_HOLD.thresholdValueSensör değeriyle karşılaştırılan değer.thresholdExtraAralık gibi bazı eşik türleri için ek değer gerekir forAVERAGE.triggerCooldownBu türden başka bir etkinlik tetiklenmeden önce geçecek soğuma süresi (milisaniye).
<EventTriggers>
<EventTrigger
name="AEB"
cameras="EVS:1, EVS:2"
sensorPropertyID="VHAL:289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
Bu örnekte, TriggerModule'nın tam sayı değerleri üreten bir VHAL sensörünü izlediği bir tetikleyici gösterilmektedir.
TriggerModule, eşitliği eşik değeriyle karşılaştırır. Eşitlik koşulu karşılandığında, 1. ve 2. EVS kameralarında kayıt tetiklenir.
<EventTrigger
name="SPEED"
cameras="Camera2:0, Camera2:1, Camera2:2, Camera2:3"
sensorPropertyID="VHAL:291504648"
description="Over speed"
recordingLengthMs="10000"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="10"
triggerCooldown="2000"/>
Bu örnekte, TriggerModule öğesinin kayan değerler üreten bir VHAL sensörünü izlediği bir tetikleyici gösterilmektedir.
TriggerModule, 10 örnek aralığındaki sensör ortalamasını 20.0 eşik değeriyle karşılaştırır.
Örnek aralık thresholdExtra içinde ayarlanır. Yeni bir etkinlik yalnızca triggerCooldown içinde ayarlanan 2000 milisaniyede bir tetiklenebilir.
Modüller
Araç İçi Kamera Hizmeti üç modülden oluşur:
Stream, kameralardan gelen akışları işleme mantığını içerir.
Recording, kayıtları işleme mantığını içerir.
Tetikleyici, sensör verilerinden kayıt tetikleme mantığını içerir. Modül API'leri, ilgili arayüzlerinde (
IStreamModule,IRecorderModuleveITriggerModule) tanımlanır veDashcamServiceAPIaracılığıylaDashcamManager'e sunulur.
Yer paylaşımı modülleri
Araç kamerası hizmeti, modül uygulamalarının nerede bulunacağını belirlemek için dashcam-service/res/values/config.xml özelliğini kullanır. Her modül için varsayılan uygulamalar sağlanır. Ancak her modül, bileşeni ilgili yapılandırma değerinde ayarlanarak yerleştirilebilir.
Aşağıdakilerin OEM uygulama bileşeni adını ayarlayın:
IRecorderModule-recording_moduleIStreamModule-streaming_moduleITriggerModule-trigger_module
Çalışma zamanında, Dashcam hizmeti her modül için config.xml içinde ayarlanan bileşen adını oluşturur.
Uygulama geliştiricinin kılavuzu
Dashcam, üretime hazır ve özelleştirilebilir bir araç kamerası çözümüdür. Araç içi kamera, Dashcam service ile iletişim kurmak için Araç İçi Kamera Yöneticisi API'lerini kullanır. Araç kamerası yöneticisi API'sini IDashcamManager adresinde bulabilirsiniz. Gerekli izinlere sahip tüm uygulamalar Dashcam Yöneticisi'ni kullanabilir.
OverlayUI
Uygulama, çalışma zamanı kaynak katmanlarıyla özelleştirilebilir. Daha fazla bilgi için Çalışma Zamanı Kaynak Katmanları başlıklı makaleyi inceleyin. Yerleştirilebilen öğelerin listesini görmek için overlayable.xml dosyasına bakın.
Tetikleyicileri genişletme
Tetikleyiciler, DashcamManager#addTrigger() çağrısıyla mevcut oturum için uzatılabilir. Eklenen tetikleyiciler yalnızca mevcut oturumda geçerlidir.
Otomatik başlatma
Kaydı otomatik başlatma özelliği desteklenmez. Ancak manuel tetikleyici, onBoot yöntemiyle DashcamManager.startRecording() çağrılarak başlatılabilir.
En iyi uygulamalar
Depolama Harici çıkarılabilir depolama alanı kullanmanız önemle tavsiye edilir.
Kullanıcı deneyimi. AAOS tasarım yönergelerine uyarak Dashcam uygulamasının kullanıcı arayüzünü sezgisel ve kullanıcı dostu olacak şekilde tasarlayın.
Performans optimizasyonu. Kaynak kullanımını en aza indirmek ve AAOS'de sorunsuz çalışmasını sağlamak için uygulamanın performansını optimize edin.
Sorun giderme
Kamera bağlantısı sorunları. EVS veya Camera2 desteklenmeli ve AAOS IVI'de kullanılabilir olmalıdır.
Depolama hataları. Kullanılabilir depolama alanını doğrulayın ve kayıtları yönetin. Dahili depolama alanının kullanılması, depolama alanının erken yıpranmasına neden olabileceğinden harici depolama alanı kullanılması önemle tavsiye edilir.