L'app Dashcam è progettata per integrarsi con AAOS, fornendo ai conducenti funzionalità di registrazione video per una maggiore sicurezza. Questa guida illustra i requisiti tecnici, i passaggi di integrazione e le best practice per garantire un'implementazione efficace.
Prerequisiti
Prima di continuare, assicurati che siano soddisfatte le seguenti condizioni preliminari:
SDK:
- È richiesto l'SDK 31 o versioni successive.
Hardware:
- Videocamere EVS o Camera2 disponibili per AAOS.
- Per le registrazioni video deve essere disponibile spazio di archiviazione interno sufficiente o il supporto di un'unità di archiviazione esterna rimovibile.
Requisiti software:
- Assistenza separata. Per saperne di più, consulta App disaccoppiate.
- Autorizzazioni. Dashcam richiede le autorizzazioni di sistema.
Recuperare il codice sorgente
Dashcam fa parte delle app AAOS separate. Per controllare il codice separato, consulta Controllare il codice.
Sfoglia il codice sorgente con Android Code Search.
Il codice sorgente è fornito in questi tre moduli:
- Servizio Dashcam. Logica di streaming, registrazione e attivazione.
- Dashcam Manager. Si connette al servizio Dashcam ed espone un'API stabile ai client
- App Dashcam.App Dashcam di riferimento che utilizza l'API Dashcam Manager
Creare Dashcam
Utilizza Soong o Gradle per creare Dashcam.
Soong
Su Soong:
mma DashcamService DashcamManager-lib DashcamApp
Gli APK si trovano in out/target/product/[lunch-target]/system/priv-app/
Gradle
Su Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
Gli APK si trovano in out/aaos-apps-gradle-build/
Le istruzioni dettagliate per la creazione di Dashcam con Gradle sono fornite nel file
README.
Autorizzazioni
Per il servizio Dashcam e l'app Dashcam sono necessarie diverse autorizzazioni di sistema.
Il modo più semplice per concedere queste autorizzazioni è includerle in una configurazione predefinita utilizzando Blueprint o Make.
In Progetto iniziale:
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,
}
In Marca:
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 \
Crea un file di autorizzazioni denominato allowed_privapp_com.android.car.dashcam.xml:
<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>
Aggiungi le autorizzazioni dal file manifest al file delle autorizzazioni.
Prima di utilizzare Dashcam, concedi in anticipo le autorizzazioni Camera2 al servizio Dashcam come mostrato in AAOS Camera.
Aggiungi il file delle autorizzazioni pre-concesse al file Blueprint o Make nello stesso modo del file delle autorizzazioni.
In pre-grant-permissions-com.android.car.dashcam.xml:
<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>
In Android.bp:
...
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,
}
Per saperne di più, vedi Integrare una prebuild in un'immagine di sistema e Aggiungere una lista consentita.
Sideload
Il file delle autorizzazioni può anche essere caricato lateralmente. Utilizza questo metodo quando la dashcam preinstallata non è configurata.
Utilizzando il file delle autorizzazioni creato in precedenza nella sezione precompilati, esegui:
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
Aggiungi il file delle autorizzazioni pre-concesse in modo simile a etc/default-permissions/.
Configurare gli overlay
Il servizio Dashcam ha configurazioni sovrapponibili.
Configurazione del servizio
dashcam-service/res/values/config.xml
Questo file contiene le configurazioni per il servizio:
config_fileIl nome del file di configurazione del trigger in/assetsallow_internal_storageConsenti il salvataggio delle registrazioni nella memoria internaboot_startup_enabledAvvio del servizio Dashcam all'avvio del dispositivonotifications_onMostra notifiche all'inizio della registrazionedefault_app_componentL'app dashcam predefinita, che ha accesso globale alle registrazioni e ai triggerrecording_moduleComponentName ofIRecordingModuleimplementationstreaming_moduleComponentName ofIStreamingModuleimplementationtrigger_moduleComponentName ofITriggerModuleimplementation
Configurazione del trigger
Per configurare gli attivatori di registrazione, crea una copia di:
dashcam-service/src/assets/config.xml
e aggiungilo alla directory degli asset. Fai riferimento a questo file nell'elemento config_file
nel file di configurazione del servizio.
La configurazione del trigger è costituita da parti di archiviazione, fotocamera e trigger:
Spazio di archiviazione
La configurazione dell'archiviazione include i seguenti elementi:
maxStorageUsagePercentPercentuale massima di spazio di archiviazione disponibile utilizzata dalla dashcam prima di eliminare le registrazioni.maxStorageUsageMegabytesQuantità massima di spazio di archiviazione in megabyte utilizzata dalla dashcam prima di eliminare le registrazioni.maxAgeHoursBeforePruneNumero massimo di ore prima che una registrazione venga eliminata. Una registrazione può essere eliminata prima se vengono raggiunti i limiti di spazio di archiviazione.
Fotocamera
La configurazione della videocamera presenta i seguenti elementi:
ID videocamera. ID della videocamera con il prefisso della videocamera.
prerollLengthMsDurata del preroll da memorizzare con ogni evento.widthLarghezza facoltativa del buffer restituito dalla videocamera.height(Facoltativo) Altezza del buffer restituito dalla videocamera.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
Questo esempio mostra l'ID videocamera EVS:1 con un preroll di 10 secondi a 1080p e l'ID videocamera Camera2:1 con un preroll di 10 secondi e larghezza e altezza predefinite.
Trigger
La configurazione del trigger è costituita da un elenco di trigger definiti da quanto segue:
nameIl nome univoco dell'attivatore.camerasID delle videocamere.sensorPropertyIDID del sensore preceduto dal gruppo di sensori. Le opzioni del prefisso sonoVHALoSENSOR_MANAGER.descriptionDescrizione del trigger visualizzata nella UI.recordingLengthMsDurata dopo l'evento da registrare in millisecondi.sensorValueTypeTipo di dati prodotti dal sensore. Le opzioni sonoINT,INT_ARRAY,FLOAT,FLOAT_ARRAYeBOOLEAN, STRING.thresholdTypeCome valutare il valore del sensore rispetto althresholdValue. Le opzioni sonoAVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKePEAK_HOLD.thresholdValueIl valore confrontato con il valore del sensore.thresholdExtraValore aggiuntivo necessario per alcuni tipi di soglia, ad esempio l'intervallo perAVERAGE.triggerCooldownIntervallo di raffreddamento in millisecondi prima di attivare un altro evento di questo tipo.
<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>
Questo esempio mostra un trigger in cui TriggerModule monitora un sensore VHAL che produce valori interi.
TriggerModule confronta l'uguaglianza con il valore di soglia. Quando la condizione di uguaglianza è soddisfatta, un trigger
registra sulle videocamere EVS 1 e 2.
<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"/>
Questo esempio mostra un trigger in cui TriggerModule monitora un sensore VHAL che produce valori float.
TriggerModule confronta la media del sensore su un intervallo di 10 campioni con il valore di soglia di 20.0.
L'intervallo di campionamento è impostato su thresholdExtra. Un nuovo evento può essere attivato solo ogni
2000 millisecondi, come impostato in triggerCooldown.
Moduli
Il servizio Dashcam è composto da tre moduli:
Stream contiene la logica per la gestione degli stream delle videocamere.
Recording contiene la logica per la gestione delle registrazioni.
Trigger contiene la logica per attivare una registrazione dai dati dei sensori. Le API del modulo sono definite nelle interfacce corrispondenti,
IStreamModule,IRecorderModuleeITriggerModuleed esposte aDashcamManagertramiteDashcamServiceAPI.
Moduli overlay
Il servizio Dashcam utilizza dashcam-service/res/values/config.xml per determinare dove
trovare le implementazioni dei moduli. Per ogni modulo vengono fornite implementazioni predefinite. Tuttavia, ogni modulo può essere sovrapposto impostando il relativo componente nel
valore di configurazione corrispondente.
Imposta il nome del componente di implementazione OEM di:
- Da
IRecorderModulearecording_module - Da
IStreamModuleastreaming_module - Da
ITriggerModuleatrigger_module
In fase di runtime, il servizio Dashcam crea un'istanza del nome del componente impostato in config.xml per ogni modulo.
Guida per gli sviluppatori di app
Dashcam è una soluzione di dashcam pronta per la produzione e personalizzabile. Dashcam
utilizza le API Dashcam Manager per comunicare con Dashcam service. L'API Dashcam
Manager è disponibile all'indirizzo IDashcamManager. Qualsiasi app con le autorizzazioni
richieste può utilizzare Dashcam Manager.
OverlayUI
L'app può essere personalizzata con le sovrapposizioni delle risorse di runtime. Per saperne di più, consulta Overlay delle risorse di runtime. Per visualizzare l'elenco degli elementi sovrapponibili, consulta overlayable.xml.
Estendi trigger
I trigger possono essere estesi per la sessione corrente con una chiamata
a DashcamManager#addTrigger(). I trigger aggiunti vengono mantenuti solo per la sessione corrente.
Avvio automatico
L'avvio automatico della registrazione non è supportato. Tuttavia, un trigger manuale può essere
avviato onBoot con una chiamata a DashcamManager.startRecording()
Best practice
Spazio di archiviazione. È consigliabile utilizzare un dispositivo di archiviazione rimovibile esterno.
Esperienza utente. Progetta l'interfaccia utente dell'app Dashcam in modo che sia intuitiva e facile da usare, rispettando le linee guida di progettazione di AAOS.
Ottimizzazione del rendimento. Ottimizza le prestazioni dell'app per ridurre al minimo l'utilizzo delle risorse e garantire un funzionamento ottimale in AAOS.
Risoluzione dei problemi
Problemi di connettività della videocamera. EVS o Camera2 devono essere supportati e disponibili in AAOS IVI.
Errori di archiviazione. Verifica lo spazio di archiviazione disponibile e gestisci le registrazioni. L'utilizzo di un'unità di archiviazione esterna è vivamente consigliato, in quanto l'utilizzo della memoria interna può causare un'usura prematura della memoria.