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 l'archiviazione esterna rimovibile
.
Requisiti software:
- Assistenza sfusa. Per scoprire di più, consulta App sfuse.
- Autorizzazioni. Dashcam richiede le autorizzazioni di sistema.
Recuperare il codice sorgente
Dashcam fa parte delle app slegate di AAOS. Per eseguire il check-out del codice non raggruppato, consulta Eseguire il check-out del 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.Fai riferimento all'applicazione Dashcam che utilizza l'API Dashcam Manager
Costruire la dashcam
Utilizza Soong o Gradle per compilare 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 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"],
}
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 Make:
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 delle 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 predefinite al file Blueprint o Make nello stesso modo in cui aggiungi il 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 scoprire di più, consulta Integrare un 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 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
Aggiungi il file delle autorizzazioni pregrant in modo simile a etc/default-permissions/
.
Configurare gli overlay
Il servizio della dashcam ha configurazioni sovrapposte.
Configurazione del servizio
dashcam-service/res/values/config.xml
Questo file contiene le configurazioni per il servizio:
config_file
Il nome del file di configurazione dell'attivatore in/assets
allow_internal_storage
Consenti il salvataggio delle registrazioni nella memoria internaboot_startup_enabled
Avvio del servizio Dashcam all'avvio del dispositivonotifications_on
Mostra notifiche all'avvio della registrazionedefault_app_component
L'app della dashcam predefinita, che ha accesso alle registrazioni globali e all'attivazione globalerecording_module
ComponentName dell'implementazione diIRecordingModule
streaming_module
ComponentName dell'implementazione diIStreamingModule
trigger_module
ComponentName dell'implementazione diITriggerModule
Configurazione degli attivatori
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 dell'attivatore è composta da parti di archiviazione, fotocamera e attivatore:
Spazio di archiviazione
La configurazione dello spazio di archiviazione contiene i seguenti elementi:
maxStorageUsagePercent
Percentuale massima di spazio di archiviazione disponibile utilizzato dalla dashcam prima di eliminare le registrazioni.maxStorageUsageMegabytes
Quantità massima di spazio di archiviazione in megabyte utilizzata dalla dashcam prima di eliminare le registrazioni.maxAgeHoursBeforePrune
Numero 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 prevede i seguenti elementi:
ID videocamera. ID della videocamera con il prefisso della videocamera.
prerollLengthMs
Durata del preroll da memorizzare con ogni evento.width
Larghezza facoltativa del buffer restituito dalla videocamera.height
Altezza facoltativa 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.
Attivazione
La configurazione dell'attivatore è costituita da un elenco di attivatori definiti da quanto segue:
name
Il nome univoco dell'attivatore.cameras
ID delle videocamere.sensorPropertyID
ID del sensore preceduto dal gruppo di sensori. Le opzioni di prefisso sonoVHAL
oSENSOR_MANAGER
.description
Descrizione dell'attivatore visualizzata nell'interfaccia utente.recordingLengthMs
Durata dopo l'evento da registrare in millisecondi.sensorValueType
Tipo di dati prodotti dal sensore. Le opzioni sonoINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
eBOOLEAN, STRING
.thresholdType
Come valutare il valore del sensore rispetto althresholdValue
. Le opzioni sonoAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
ePEAK_HOLD
.thresholdValue
Il valore rispetto al valore del sensore.thresholdExtra
Valore aggiuntivo necessario per alcuni tipi di soglie, ad esempio l'intervallo perAVERAGE
.triggerCooldown
Tempo di attesa in millisecondi prima dell'attivazione di 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 attivatore 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 attivatore 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 attivatore in cui TriggerModule
monitora un sensore VHAL che produce valori di tipo float.
TriggerModule
confronta la media del sensore su un intervallo di 10
campioni con il valore di soglia 20.0
.
L'intervallo di campioni è 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.
Registrazione 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 corrispondenti,
IStreamModule
,IRecorderModule
eITriggerModule
, ed esposte aDashcamManager
tramiteDashcamServiceAPI
.
Moduli overlay
Il servizio Dashcam utilizza dashcam-service/res/values/config.xml
per determinare dove trovare le implementazioni dei moduli. Sono disponibili 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:
- Da
IRecorderModule
arecording_module
- Da
IStreamModule
astreaming_module
- Da
ITriggerModule
atrigger_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.
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 dispositivo di archiviazione rimovibile esterno.
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.