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 soddisfatti i seguenti prerequisiti:
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 per lo spazio di archiviazione esterno rimovibile
.
Requisiti software:
- Assistenza sfusa. Per scoprire di più, consulta App slegate.
- Autorizzazioni. Dashcam richiede le autorizzazioni di sistema.
Recuperare il codice sorgente
Puoi trovare il codice sorgente nella Ricerca codice Android all'indirizzo:
Il codice sorgente è fornito in questi tre moduli:
- Servizio Dashcam. Logica di streaming, registrazione e attivazione.
- Dashcam Manager. Si connette al servizio Dashcam e mette a disposizione un'API stabile per i client
- App Dashcam.Fai riferimento all'applicazione Dashcam che utilizza l'API Dashcam Manager
Costruire la dashcam
Utilizza Soong o Gradle per compilare Dashcam.
Soong
Prima di eseguire il build da Soong, assicurati di pulire le directory .cxx
.
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 compilare Dashcam con Gradle sono fornite nel
README
file.
Autorizzazioni
Per il Servizio Dashcam e per 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 Blueprint:
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
In Make:
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/CarCatApp/allowed_privapp_com.android.car.dashcam:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.android.car.dashcam.xml \
Crea un file delle autorizzazioni denominato allowed_privapp_com.android.car.dashcam.xml
:
<permissions>
<privapp-permissions package="com.android.car.dashcam">
<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.
Per scoprire di più, consulta Precompilato in un'immagine di sistema.
Sideload
Il file delle autorizzazioni può anche essere caricato lateralmente. Utilizza questo metodo quando la dashcam predefinita non è configurata.
Utilizzando il file delle autorizzazioni creato in precedenza nella sezione Prebuilt, 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
Configurare gli overlay
Il servizio della videocamera di bordo ha configurazioni sovrapposte.
Configurazione del servizio
dashcam-service/res/values/config.xml
Questo file contiene le configurazioni per il servizio:
allow_internal_storage
Consenti le registrazioni nella memoria internasave_location
Il nome della directory in cui salvare le registrazioni. Il valore predefinito è dashcammax_storage_mb
Quantità di spazio di archiviazione da consentire alla dashcam di utilizzaremax_age_days
Per quanto tempo conservare un file prima della potaturaboot_startup_enabled
Avvio del servizio Dashcam all'avvio del dispositivonotifications_on
Mostra notifiche all'avvio della registrazionenative_recorder
Utilizza le API NDK, per impostazione predefinita le API Javanative_renderer
Utilizza le API NDK, per impostazione predefinita le API Javadefault_app_component
L'applicazione della dashcam predefinita, che ha accesso alle registrazioni globali e all'attivazione globalerecording_module
ComponentName dell'implementazione di IRecordingModulestreaming_module
ComponentName dell'implementazione di IRecordingModuletrigger_module
ComponentName dell'implementazione di IRecordingModule
Configurare un trigger
Per attivare la configurazione, esegui:
dashcam-service/src/assets/config.xml
Questo file contiene le configurazioni per gli attivatori di registrazione. La configurazione dell'attivatore è costituita da due parti:
ID pre-roll. L'ID della videocamera, EVS o Camera2, a seconda di ciò che è supportato.
prerollLengthMs
Durata del pre-roll da memorizzare con ogni evento.
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
Questo esempio mostra l'ID videocamera 0 con un pre-roll di 10 secondi.
name
Il nome univoco dell'attivatorecamera
ID della videocamera EVS o Camera2 a seconda di ciò che è supportatosensorPropertyID
ID del sensoredescription
Descrizione dell'attivatore visualizzata nell'interfaccia utenterecordingLengthMs
Durata dopo l'evento da registrare in millisecondi.sensorType
Quale tipo di sensore. Le opzioni sonoVHAL
oSENSOR_MANAGER
sensorValueType
Tipo di dati prodotti dal sensore. Le opzioni sonoINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
eBOOLEAN, STRING
thresholdType
Come valutare il valore del sensore. Le opzioni sonoAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
ePEAK_HOLD
thresholdValue
Il valore con cui confrontare il valore del sensore con il tipo di sogliathresholdExtra
Valore aggiuntivo necessario per alcuni tipi di soglie, ad esempio l'intervallo perAVERAGE
triggerCooldown
Tempo di attesa prima di attivare un altro evento di questo tipo in millisecondi.
<EventTriggers>
<EventTrigger
name="AEB"
camera="1 2"
sensorPropertyID="289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorType="VHAL"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
Questo esempio mostra un sensore VHAL che produce valori interi in cui viene confrontata un'uguaglianza con il valore di soglia. Quando la condizione di uguaglianza è soddisfatta, un attivatore registra sulle videocamere 1 e 2.
<EventTrigger
name="SPEED"
camera="1 2 3 4"
sensorPropertyID="291504648"
description="Over speed"
recordingLengthMs="10000"
sensorType="VHAL"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="1000"
triggerCooldown="2000"/>
Questo esempio mostra un sensore VHAL che produce valori in virgola mobile in cui valutiamo la media su un intervallo di campioni rispetto al valore di soglia. L'intervallo di campioni è impostato in thresholdExtra
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 del sensore. Le API del modulo sono definite nelle relative interfacce
IStreamModule
,IRecorderModule
eITriggerModule
ed esposte a DashcamManager tramiteDashcamServiceAPI
Moduli overlay
Il servizio Dashcam utilizza dashcam-service/res/values/config.xml
per determinare dove trovare le implementazioni dei moduli. Forniamo implementazioni predefinite per ogni
modulo. Tuttavia, ogni modulo può essere sovrapposto impostando il relativo componente nel valore di configurazione corrispondente.
Imposta il nome del componente di implementazione OEM di
IRecorderModule
surecording_module
Imposta il nome del componente di implementazione OEM
IStreamModule
sul modulo di streaming.Imposta il nome del componente di implementazione OEM di
ITriggerModule
sutrigger_module
In fase di esecuzione, il servizio Dashcam esegue l'inizializzazione del nome del componente impostato in
config.xml
per ogni modulo.
Guida per gli sviluppatori di app
Dashcam è una soluzione di dashcam e personalizzabile pronta per la produzione. La 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.
Autorizzazioni
Camera2 ed EVS sono supportati.
Preassemblati
Il modo più semplice per concedere queste autorizzazioni è includerle nella configurazione predefinita utilizzando Blueprint o Make.
OverlayUI
L'app può essere personalizzata con gli overlay delle risorse di runtime. Per saperne di più, consulta Overlay delle risorse di runtime. Per visualizzare l'elenco degli elementi sovrapponibili, consulta overlayable.xml.
Attivatori estesi
Gli attivatori possono essere estesi per la sessione corrente con una chiamata
a DashcamManager.addTrigger()
. Gli attivatori aggiunti rimangono attivi solo per la sessione corrente.
Avvio automatico
La registrazione con avvio automatico non è supportata. Tuttavia, un attivatore manuale può essere avviato onBoot
con una chiamata a DashcamManager.startRecording()
Best practice
Spazio di archiviazione. Ti consigliamo vivamente di utilizzare un'unità di archiviazione rimovibile esterna.
Esperienza utente. Progetta l'interfaccia utente dell'app Dashcam in modo che sia intuitiva e user-friendly, rispettando le linee guida di progettazione di AAOS.
Ottimizzazione delle prestazioni. Ottimizza le prestazioni dell'app per ridurre al minimo l'utilizzo delle risorse e garantire un funzionamento regolare in AAOS.
Risoluzione dei problemi
Problemi di connettività della videocamera. EVS o Camera2 devono essere supportati e disponibili in AAOS IVI.
Errori di archiviazione. Verificare lo spazio di archiviazione disponibile e gestire le registrazioni. L'archiviazione esterna è vivamente consigliata, poiché l'utilizzo della memoria interna può provocarne un'usura prematura.