Integrare la dashcam

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

Diagramma dell'architettura

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_file Il nome del file di configurazione del trigger in /assets
  • allow_internal_storage Consenti il salvataggio delle registrazioni nella memoria interna
  • boot_startup_enabled Avvio del servizio Dashcam all'avvio del dispositivo
  • notifications_on Mostra notifiche all'inizio della registrazione
  • default_app_component L'app dashcam predefinita, che ha accesso globale alle registrazioni e ai trigger
  • recording_module ComponentName of IRecordingModule implementation
  • streaming_module ComponentName of IStreamingModule implementation
  • trigger_module ComponentName of ITriggerModule implementation

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:

  • maxStorageUsagePercent Percentuale massima di spazio di archiviazione disponibile utilizzata 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 presenta 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 (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:

  • name Il nome univoco dell'attivatore.

  • cameras ID delle videocamere.

  • sensorPropertyID ID del sensore preceduto dal gruppo di sensori. Le opzioni del prefisso sono VHAL o SENSOR_MANAGER.

  • description Descrizione del trigger visualizzata nella UI.

  • recordingLengthMs Durata dopo l'evento da registrare in millisecondi.

  • sensorValueType Tipo di dati prodotti dal sensore. Le opzioni sono INT, INT_ARRAY, FLOAT, FLOAT_ARRAY e BOOLEAN, STRING.

  • thresholdType Come valutare il valore del sensore rispetto al thresholdValue. Le opzioni sono AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK e PEAK_HOLD.

  • thresholdValue Il valore confrontato con il valore del sensore.

  • thresholdExtra Valore aggiuntivo necessario per alcuni tipi di soglia, ad esempio l'intervallo per AVERAGE.

  • triggerCooldown Intervallo 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, IRecorderModule e ITriggerModule ed esposte a DashcamManager tramite DashcamServiceAPI.

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 IRecorderModule a recording_module
  • Da IStreamModule a streaming_module
  • Da ITriggerModule a trigger_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.