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 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

Diagramma dell'architettura

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 interna
  • boot_startup_enabled Avvio del servizio Dashcam all'avvio del dispositivo
  • notifications_on Mostra notifiche all'avvio della registrazione
  • default_app_component L'app della dashcam predefinita, che ha accesso alle registrazioni globali e all'attivazione globale
  • recording_module ComponentName dell'implementazione di IRecordingModule
  • streaming_module ComponentName dell'implementazione di IStreamingModule
  • trigger_module ComponentName dell'implementazione di ITriggerModule

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 sono VHAL o SENSOR_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 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 rispetto al valore del sensore.

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

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