Dashcam einbinden

Die Dashcam App ist für die Integration in AAOS konzipiert und bietet Fahrern Videofunktionen für mehr Sicherheit. In diesem Leitfaden finden Sie die technischen Anforderungen, Integrationsschritte und Best Practices für eine erfolgreiche Implementierung.

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 Videoaufnahmen muss genügend interner Speicherplatz oder Unterstützung für herausnehmbare externe Speichergeräte
    vorhanden sein.

Softwareanforderungen:

  • Entbündelter Support: Weitere Informationen
  • Berechtigungen Für die Dashcam sind Systemberechtigungen erforderlich.

Quellcode abrufen

Die Dashcam ist Teil der entkoppelten AAOS-Apps. Informationen zum Auschecken des entbündelten Codes finden Sie unter Code auschecken.

Android Code Search verwenden, um den Quellcode anzusehen.

Der Quellcode ist in diesen drei Modulen enthalten:

  • Dashcam-Dienst. Streaming-, Aufzeichnungs- und Triggerlogik.
  • Dashcam Manager Stellt eine Verbindung zum Dashcam-Dienst her und bietet Clients eine stabile API.
  • Dashcam-App: Verweisen Sie mit der Dashcam Manager API auf die Dashcam-Anwendung.

Architekturdiagramm

Dashcam erstellen

Verwenden Sie Soong oder Gradle, um die Dashcam zu erstellen.

Soong

Auf Soong:

mma DashcamService DashcamManager-lib DashcamApp

Die APKs befinden sich in 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 in 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 gewähren Sie diese Berechtigungen, indem Sie sie in eine vorgefertigte Einrichtung einbeziehen, die entweder mit Blueprint oder Make erstellt wurde.

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 Camera2-Berechtigungen erteilen, wie unter AAOS Camera beschrieben.

Fügen Sie die Datei mit den vorab gewährten Berechtigungen der Blueprint- oder Make-Datei auf dieselbe 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 Sideloading installiert werden. Verwenden Sie diese Methode, wenn die vorgefertigte Dashcam nicht konfiguriert ist.

Führen Sie mit der Berechtigungsdatei, die zuvor im Abschnitt „Prebuilts“ erstellt wurde, 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 vorab gewährten Berechtigungen auf ähnliche Weise wie 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 Der Name der Triggerkonfigurationsdatei in /assets
  • allow_internal_storage Aufzeichnungen im internen Speicher speichern
  • boot_startup_enabled Dashcam-Dienst beim Hochfahren des Geräts starten
  • notifications_on Benachrichtigungen anzeigen, wenn die Aufzeichnung beginnt
  • default_app_component Die Standard-Dashcam-App, die globalen Zugriff auf Aufzeichnungen und globale Trigger hat
  • recording_module ComponentName der IRecordingModule-Implementierung
  • streaming_module ComponentName der IStreamingModule-Implementierung
  • trigger_module ComponentName der ITriggerModule-Implementierung

Triggerkonfiguration

Wenn Sie die Aufzeichnungstrigger konfigurieren möchten, erstellen Sie eine Kopie von:

dashcam-service/src/assets/config.xml

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

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

Speicher

Die Speicherkonfiguration hat die folgenden Elemente:

  • maxStorageUsagePercent Maximaler Prozentsatz des verfügbaren Speichers, den die Dashcam verwendet, bevor Aufnahmen gelöscht werden.

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

  • maxAgeHoursBeforePrune Maximale Anzahl von Stunden, bevor eine Aufzeichnung gelöscht wird. Eine Aufnahme kann früher gelöscht werden, wenn Speicherplatzbeschränkungen erreicht werden.

Kamera

Die Kamerakonfiguration hat die folgenden Elemente:

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

  • prerollLengthMs Länge des Prerolls, der mit jedem Ereignis gespeichert wird.

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

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

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

In diesem Beispiel wird die Kamera-ID EVS:1 mit einem 10‑sekündigen Preroll in 1080p und die Kamera-ID Camera2:1 mit einem 10‑sekündigen Preroll und Standardbreite und ‑höhe gezeigt.

Trigger

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

  • 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 auf der Benutzeroberfläche angezeigt wird.

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

  • sensorValueType Vom Sensor erzeugter Datentyp. Die Optionen sind INT, INT_ARRAY, FLOAT, FLOAT_ARRAY und BOOLEAN, STRING.

  • thresholdType Wie der Sensorwert mit dem thresholdValue verglichen wird. 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 Für einige Schwellenwerttypen wie „Bereich“ für AVERAGE ist ein zusätzlicher Wert erforderlich.

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

In diesem Beispiel wird ein Trigger gezeigt, in dem TriggerModule einen VHAL-Sensor überwacht, der Ganzzahlwerte erzeugt. TriggerModule vergleicht die Gleichheit mit dem Schwellenwert. Wenn die Gleichheitsbedingung erfüllt ist, wird ein Trigger auf den EVS-Kameras 1 und 2 aufgezeichnet.

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

In diesem Beispiel wird ein Trigger gezeigt, bei dem TriggerModule einen VHAL-Sensor überwacht, der Gleitkommawerte erzeugt. TriggerModule vergleicht den Sensordurchschnitt über einen Bereich von 10 Messungen mit dem Schwellenwert von 20.0. Der Stichprobenbereich 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.

  • Recording enthält die Logik für die Verarbeitung von Aufnahmen.

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

Overlay-Module

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

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

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

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 DashcamManager 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 Runtime Resource Overlays. Eine Liste der Elemente, die überlagert werden können, finden Sie unter overlayable.xml.

Trigger erweitern

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

Autostart

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

Best Practices

  • Speicher Wir empfehlen dringend, ein externes Wechselspeichermedium zu verwenden.

  • Nutzerfreundlichkeit: Gestalte die Benutzeroberfläche der Dashcam-App intuitiv und nutzerfreundlich und halte dich dabei an die AAOS-Designrichtlinien.

  • Leistungsoptimierung: Optimieren Sie die Leistung der App, um die Ressourcennutzung zu minimieren und einen reibungslosen Betrieb in AAOS zu gewährleisten.

Fehlerbehebung

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

  • Speicherfehler. Verfügbaren Speicherplatz prüfen und Aufnahmen verwalten Die Verwendung von externem Speicher wird dringend empfohlen, da die Verwendung von internem Speicher zu einem vorzeitigen Verschleiß des Speichers führen kann.