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
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 lassenboot_startup_enabled
Dashcam-Dienst beim Starten des Geräts startennotifications_on
Benachrichtigungen beim Starten der Aufzeichnung anzeigendefault_app_component
Die Standard-Dashcam-App, die globalen Zugriff auf Aufnahmen und globale Trigger hatrecording_module
ComponentName derIRecordingModule
-Implementierungstreaming_module
ComponentName derIStreamingModule
-Implementierungtrigger_module
ComponentName derITriggerModule
-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 sindVHAL
oderSENSOR_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 sindINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
undBOOLEAN, STRING
.thresholdType
So wird der Sensorwert mit demthresholdValue
verglichen. Die Optionen sindAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
undPEAK_HOLD
.thresholdValue
Der Wert, der mit dem Sensorwert verglichen wird.thresholdExtra
Zusätzlicher Wert, der für einige Grenzwerttypen wie den Bereich fürAVERAGE
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
undITriggerModule
definiert und werden überDashcamServiceAPI
derDashcamManager
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
bisrecording_module
IStreamModule
bisstreaming_module
ITriggerModule
bistrigger_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.