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 einen externen Wechselspeicher
    verfügbar sein.

Softwareanforderungen:

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

Quellcode abrufen

Die Dashcam-App ist eine der nicht in AAOS enthaltenen Apps. Weitere Informationen zum Abrufen des entpackten Codes finden Sie unter Code abrufen.

Mit der Android Code Search können Sie den Quellcode durchsuchen.

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-App, die die Dashcam Manager API verwendet

Architekturdiagramm

Dashcam erstellen

Verwenden Sie Soong oder Gradle, um Dashcam zu erstellen.

Soong

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 einschließen.

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 \

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

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

Bevor Sie Dashcam verwenden, müssen Sie dem Dashcam-Dienst die Kamera 2-Berechtigungen erteilen, wie unter AAOS-Kamera beschrieben.

Fügen Sie die Datei mit den vorab erteilten Berechtigungen der Blueprint- oder Make-Datei auf die gleiche Weise wie die Berechtigungsdatei hinzu.

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

Weitere Informationen finden Sie unter Prebuild in ein System-Image einbinden und Zulassungsliste hinzufügen.

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 „Prebuilts“ 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

Fügen Sie die Datei mit den Berechtigungen vor der Genehmigung ähnlich wie bei etc/default-permissions/ hinzu.

Overlays konfigurieren

Der Dashcam-Dienst hat überlagerbare Konfigurationen.

Dienstkonfiguration

dashcam-service/res/values/config.xml

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

  • config_file Name der Triggerkonfigurationsdatei in /assets
  • allow_internal_storage Aufzeichnungen im internen Speicher speichern lassen
  • boot_startup_enabled Dashcam-Dienst beim Starten des Geräts starten
  • notifications_on Benachrichtigungen beim Starten der Aufzeichnung anzeigen
  • default_app_component Die Standard-Dashcam-App, die globalen Zugriff auf Aufnahmen und globale Trigger hat
  • recording_module ComponentName der IRecordingModule-Implementierung
  • streaming_module ComponentName der IStreamingModule-Implementierung
  • trigger_module ComponentName der ITriggerModule-Implementierung

Triggerkonfiguration

Erstellen Sie zum Konfigurieren der Aufzeichnungstrigger eine Kopie der folgenden Dateien:

dashcam-service/src/assets/config.xml

und fügen Sie ihn dem Assets-Verzeichnis hinzu. Verweisen Sie in der Dienstkonfigurationsdatei im Element config_file auf diese Datei.

Die Triggerkonfiguration besteht aus Speicher-, Kamera- und Triggerteilen:

Speicher

Die Speicherkonfiguration hat folgende Elemente:

  • maxStorageUsagePercent Der maximale Prozentsatz des verfügbaren Speicherplatzes, den die Dashcam nutzt, bevor Aufnahmen gelöscht werden.

  • maxStorageUsageMegabytes Maximale Speichermenge in Megabyte, die die Dashcam verwendet, bevor Aufnahmen gelöscht werden.

  • maxAgeHoursBeforePrune Maximale Anzahl von Stunden, nach denen eine Aufnahme gekürzt wird. Eine Aufnahme kann auch früher gekürzt werden, wenn die Speicherlimits erreicht werden.

Kamera

Die Kamerakonfiguration umfasst die folgenden Elemente:

  • Kamera-ID ID der Kamera mit dem Kamerapräfix.

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

  • width Optionale Breite des von der Kamera zurückgegebenen Buffers.

  • height Optionale Höhe des von der Kamera zurückgegebenen Buffers.

<CameraConfig>
  <Camera
      ID="EVS:1"
      prerollLengthMs="10000"
      width="1920"
      height="1080" />
  <Camera
      ID="Camera2:1"
      prerollLengthMs="10000" />
</CameraConfig>

In diesem Beispiel ist die Kamera-ID „EVS:1“ mit einem 10-Sekunden-Preroll bei 1080p und die Kamera-ID „Camera2:1“ mit einem 10-Sekunden-Preroll und Standardbreite und -höhe zu sehen.

Auslöser

Die Triggerkonfiguration besteht aus einer Liste von Triggern, die durch Folgendes definiert sind:

  • name Der eindeutige Trigger-Name.

  • cameras IDs der Kameras.

  • sensorPropertyID ID des Sensors mit dem Präfix der Sensorgruppe. Die Präfixoptionen sind VHAL oder SENSOR_MANAGER.

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

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

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

  • thresholdType So wird der Sensorwert mit dem thresholdValue verglichen. Die Optionen sind AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK und PEAK_HOLD.

  • thresholdValue Der Wert, der mit dem Sensorwert verglichen wird.

  • thresholdExtra Zusätzlicher Wert, der für einige Grenzwerttypen wie den Bereich für AVERAGE erforderlich ist.

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

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

Dieses Beispiel zeigt einen Trigger, bei dem TriggerModule einen VHAL-Sensor überwacht, der Ganzzahlwerte liefert. Bei TriggerModule wird der Wert mit dem Schwellenwert verglichen. Wenn die Gleichheitsbedingung erfüllt ist, löst ein Trigger eine Aufzeichnung auf den EVS-Kameras 1 und 2 aus.

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

Dieses Beispiel zeigt einen Trigger, bei dem TriggerModule einen VHAL-Sensor überwacht, der Gleitkommawerte liefert. TriggerModule vergleicht den Sensordurchschnitt über einen Bereich von 10 Stichproben mit dem Grenzwert 20.0. Der Stichprobenumfang wird in thresholdExtra festgelegt. Ein neues Ereignis kann nur alle 2000 Millisekunden ausgelöst werden, wie in triggerCooldown 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 der DashcamManager zur Verfügung gestellt.

Overlay-Module

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

Legen Sie den Namen der OEM-Implementierungskomponente für Folgendes fest:

  • IRecorderModule bis recording_module
  • IStreamModule bis streaming_module
  • ITriggerModule bis trigger_module

Während der 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.

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.