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:
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
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 zulassensave_location
Der Name des Verzeichnisses, in dem Aufnahmen gespeichert werden sollen. Standardeinstellung: dashcammax_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 startennotifications_on
Benachrichtigungen beim Starten der Aufzeichnung anzeigennative_recorder
NDK-APIs verwenden, standardmäßig Java-APIsnative_renderer
NDK-APIs verwenden, standardmäßig Java-APIsdefault_app_component
Die Standard-Dashcam-Anwendung. Diese Anwendung hat Zugriff auf globale Aufnahmen und globale Trigger.recording_module
ComponentName der IRecordingModule-Implementierungstreaming_module
ComponentName der IRecordingModule-Implementierungtrigger_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 Triggernamecamera
ID der Kamera, entweder EVS oder Camera2, je nachdem, was unterstützt wirdsensorPropertyID
ID des Sensorsdescription
Beschreibung des Triggers, die in der Benutzeroberfläche angezeigt wirdrecordingLengthMs
Dauer nach dem Ereignis, die aufgezeichnet werden soll, in Millisekunden.sensorType
Welchen Sensortyp. Optionen sindVHAL
oderSENSOR_MANAGER
.sensorValueType
Art der vom Sensor generierten Daten. Optionen sindINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
undBOOLEAN, STRING
.thresholdType
So bewerten Sie den Sensorwert. Optionen sindAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
undPEAK_HOLD
.thresholdValue
Wert, mit dem der Sensorwert mit dem Grenzwerttyp verglichen wirdthresholdExtra
Zusätzlicher Wert, der für einige Schwellenwerttypen wie „Bereich“ fürAVERAGE
erforderlich isttriggerCooldown
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
undITriggerModule
definiert und werden überDashcamServiceAPI
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
aufrecording_module
fest.Legen Sie den Namen der OEM-Implementierungskomponente von
IStreamModule
auf das Streamingmodul fest.Legen Sie den Namen der OEM-Implementierungskomponente von
ITriggerModule
auftrigger_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.