Dashcam einbinden

Die Dashcam App ist für die Einbindung in AAOS konzipiert und bietet Fahrern Videoaufzeichnungsmöglichkeiten für mehr Sicherheit. In diesem Leitfaden werden die technischen Anforderungen, Integrationsschritte und Best Practices für eine erfolgreiche Implementierung beschrieben.

Voraussetzungen

Bevor Sie fortfahren, müssen die folgenden Voraussetzungen erfüllt sein:

SDK:

  • SDK 31 oder höher ist erforderlich.

Hardware:

  • EVS- oder Camera2-Kameras, die für AAOS verfügbar sind.
  • Für Videoaufzeichnungen muss genügend interner Speicherplatz oder Unterstützung für Wechseldatenträger
    verfügbar sein.

Softwareanforderungen:

  • Unverbundener Support Weitere Informationen finden Sie unter Unverbundene Apps.
  • Berechtigungen Für Dashcam sind Systemberechtigungen erforderlich.

Quellcode abrufen

Den Quellcode finden Sie in der Android Code Search unter:

https://cs.android.com/android/platform/superproject/+/ub-automotive-master-20250219:packages/apps/Car/Dashcam/

Der Quellcode wird in diesen drei Modulen bereitgestellt:

  • Dashcam-Dienst Streaming, Aufzeichnung und Triggerlogik
  • Dashcam Manager Stellt eine Verbindung zum Dashcam-Dienst her und stellt Clients eine stabile API bereit
  • Dashcam App: Referenz-Dashcam-Anwendung mit der Dashcam Manager API

Architekturdiagramm

Dashcam erstellen

Verwenden Sie Soong oder Gradle, um Dashcam zu erstellen.

Soong

Bevor Sie mit Soong erstellen, müssen Sie die .cxx-Verzeichnisse bereinigen.

In Soong:

mma DashcamService DashcamManager-lib DashcamApp

Die APKs befinden sich unter out/target/product/[lunch-target]/system/priv-app/.

Gradle

In Gradle:

./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble

Die APKs befinden sich unter out/aaos-apps-gradle-build/.

Eine detaillierte Anleitung zum Erstellen von Dashcam mit Gradle finden Sie in der Datei README.

Berechtigungen

Für den Dashcam-Dienst und die Dashcam App sind mehrere Systemberechtigungen erforderlich.

Am einfachsten erteilen Sie diese Berechtigungen, indem Sie sie mithilfe von Blueprint oder Make in einer vorkonfigurierten Einrichtung einbinden.

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 \

Erstellen Sie eine Berechtigungsdatei mit dem Namen 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>

Fügen Sie der Berechtigungsdatei Berechtigungen aus dem Manifest hinzu.

Weitere Informationen finden Sie unter Vorab in ein System-Image eingebunden.

Sideload

Die Berechtigungsdatei kann auch per Sideload installiert werden. Verwenden Sie diese Methode, wenn die vorkonfigurierte Dashcam nicht konfiguriert ist.

Führen Sie mit der Berechtigungsdatei, die Sie zuvor im Abschnitt „Vorab erstellte Builds“ erstellt haben, Folgendes aus:

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

Overlays konfigurieren

Der Dashcam-Dienst hat überlagerbare Konfigurationen.

Dienstkonfiguration

dashcam-service/res/values/config.xml

Diese Datei enthält Konfigurationen für den Dienst:

  • allow_internal_storage Aufzeichnungen im internen Speicher zulassen
  • save_location Der Name des Verzeichnisses, in dem Aufnahmen gespeichert werden sollen. Standardeinstellung: dashcam
  • max_storage_mb Wie viel Speicherplatz darf die Dashcam nutzen?
  • max_age_days Wie lange sollten Dateien aufbewahrt werden, bevor sie bereinigt werden?
  • boot_startup_enabled Dashcam-Dienst beim Starten des Geräts starten
  • notifications_on Benachrichtigungen beim Starten der Aufzeichnung anzeigen
  • native_recorder NDK-APIs verwenden, standardmäßig Java-APIs
  • native_renderer NDK-APIs verwenden, standardmäßig Java-APIs
  • default_app_component Die Standard-Dashcam-Anwendung. Diese Anwendung hat Zugriff auf globale Aufnahmen und globale Trigger.
  • recording_module ComponentName der IRecordingModule-Implementierung
  • streaming_module ComponentName der IRecordingModule-Implementierung
  • trigger_module ComponentName der IRecordingModule-Implementierung

Trigger konfigurieren

Führen Sie zum Auslösen der Konfiguration Folgendes aus:

dashcam-service/src/assets/config.xml

Diese Datei enthält Konfigurationen für Aufnahmetrigger. Die Triggerkonfiguration besteht aus zwei Teilen:

  • Pre-Roll-ID Die ID der Kamera, entweder EVS oder Camera2, je nachdem, was unterstützt wird.

  • prerollLengthMs Dauer des Prerolls, das mit jedem Ereignis gespeichert werden soll.

<Preroll>
  <Camera
      ID="0"
      prerollLengthMs="10000" />
</Preroll>

In diesem Beispiel ist die Kamera-ID 0 mit einem Pre-Roll von 10 Sekunden zu sehen.

  • name Eindeutiger Triggername

  • camera ID der Kamera, entweder EVS oder Camera2, je nachdem, was unterstützt wird

  • sensorPropertyID ID des Sensors

  • description Beschreibung des Triggers, die in der Benutzeroberfläche angezeigt wird

  • recordingLengthMs Dauer nach dem Ereignis, die aufgezeichnet werden soll, in Millisekunden.

  • sensorType Welchen Sensortyp. Optionen sind VHAL oder SENSOR_MANAGER.

  • sensorValueType Art der vom Sensor generierten Daten. Optionen sind INT, INT_ARRAY, FLOAT, FLOAT_ARRAY und BOOLEAN, STRING.

  • thresholdType So bewerten Sie den Sensorwert. Optionen sind AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK und PEAK_HOLD.

  • thresholdValue Wert, mit dem der Sensorwert mit dem Grenzwerttyp verglichen wird

  • thresholdExtra Zusätzlicher Wert, der für einige Schwellenwerttypen wie „Bereich“ für AVERAGE erforderlich ist

  • triggerCooldown Wartezeit in Millisekunden, bevor ein weiteres Ereignis dieses Typs ausgelöst wird.

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

In diesem Beispiel wird ein VHAL-Sensor mit Ganzzahlwerten gezeigt, bei dem wir eine Gleichheit mit dem Grenzwert vergleichen. Wenn die Gleichheitsbedingung erfüllt ist, wird ein Trigger ausgelöst, der die Kameras 1 und 2 aufzeichnet.

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

In diesem Beispiel wird ein VHAL-Sensor mit Gleitkommawerten verwendet, bei dem der Mittelwert über einen Bereich von Samples mit dem Grenzwert verglichen wird. Der Stichprobenbereich ist in thresholdExtra festgelegt.

Module

Der Dashcam-Dienst besteht aus drei Modulen:

  • Stream enthält die Logik für die Verarbeitung von Streams von Kameras.

  • Aufzeichnung enthält die Logik für die Verarbeitung von Aufzeichnungen.

  • Trigger enthält die Logik zum Auslösen einer Aufzeichnung aus Sensordaten. Die Modul-APIs sind in ihren entsprechenden Schnittstellen IStreamModule, IRecorderModule und ITriggerModule definiert und werden über DashcamServiceAPI für den DashcamManager freigegeben.

Overlay-Module

Der Dashcam-Dienst verwendet dashcam-service/res/values/config.xml, um zu ermitteln, wo sich die Modulimplementierungen befinden. Wir stellen für jedes Modul Standardimplementierungen bereit. Jedes Modul kann jedoch überlagert werden, indem die entsprechende Komponente im entsprechenden Konfigurationswert festgelegt wird.

  • Legen Sie den Namen der OEM-Implementierungskomponente von IRecorderModule auf recording_module fest.

  • Legen Sie den Namen der OEM-Implementierungskomponente von IStreamModule auf das Streamingmodul fest.

  • Legen Sie den Namen der OEM-Implementierungskomponente von ITriggerModule auf trigger_module fest.

    Zur Laufzeit instanziiert der Dashcam-Dienst den in config.xml festgelegten Komponentennamen für jedes Modul.

Leitfaden für App-Entwickler

Dashcam ist eine produktionsreife und anpassbare Dashcam-Lösung. Die Dashcam verwendet Dashcam Manager APIs, um mit Dashcam service zu kommunizieren. Die Dashcam Manager API finden Sie unter IDashcamManager. Jede App mit den erforderlichen Berechtigungen kann Dashcam Manager verwenden.

Berechtigungen

Camera2 und EVS werden unterstützt.

Vordefiniert

Am einfachsten erteilen Sie diese Berechtigungen, indem Sie sie mit Blueprint oder Make in der vorkonfigurierten Einrichtung einschließen.

OverlayUI

Die App kann mit Laufzeit-Ressourcen-Overlays angepasst werden. Weitere Informationen finden Sie unter Laufzeit-Ressourcen-Overlays. Eine Liste der überlagerbaren Elemente findest du unter overlayable.xml.

Trigger verlängern

Trigger können mit einem Aufruf von DashcamManager.addTrigger() für die aktuelle Sitzung verlängert werden. Hinzugefügte Trigger gelten nur für die aktuelle Sitzung.

Automatisch starten

Die automatische Aufnahme wird nicht unterstützt. Ein manueller Trigger kann jedoch onBoot mit einem Aufruf von DashcamManager.startRecording() gestartet werden.

Best Practices

  • Speicher Wir empfehlen dringend, einen externen Wechseldatenträger zu verwenden.

  • Nutzerfreundlichkeit Die Benutzeroberfläche der Dashcam-App muss intuitiv und nutzerfreundlich sein und den Designrichtlinien von AAOS entsprechen.

  • Leistungsoptimierung Optimieren Sie die Leistung der App, um die Ressourcennutzung zu minimieren und einen reibungslosen Betrieb in AAOS zu ermöglichen.

Fehlerbehebung

  • Probleme mit der Kameraverbindung EVS oder Camera2 müssen in AAOS IVI unterstützt und verfügbar sein.

  • Speicherfehler Verfügbaren Speicherplatz prüfen und Aufnahmen verwalten Wir empfehlen dringend, einen externen Speicher zu verwenden, da der interne Speicher sonst vorzeitig verschleißen kann.