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.
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_fileDer Name der Triggerkonfigurationsdatei in/assetsallow_internal_storageAufzeichnungen im internen Speicher speichernboot_startup_enabledDashcam-Dienst beim Hochfahren des Geräts startennotifications_onBenachrichtigungen anzeigen, wenn die Aufzeichnung beginntdefault_app_componentDie Standard-Dashcam-App, die globalen Zugriff auf Aufzeichnungen und globale Trigger hatrecording_moduleComponentName derIRecordingModule-Implementierungstreaming_moduleComponentName derIStreamingModule-Implementierungtrigger_moduleComponentName derITriggerModule-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:
maxStorageUsagePercentMaximaler Prozentsatz des verfügbaren Speichers, den die Dashcam verwendet, bevor Aufnahmen gelöscht werden.maxStorageUsageMegabytesMaximale Speichermenge in Megabyte, die von der Dashcam verwendet wird, bevor Aufnahmen gelöscht werden.maxAgeHoursBeforePruneMaximale 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.
prerollLengthMsLänge des Prerolls, der mit jedem Ereignis gespeichert wird.widthOptionale Breite des von der Kamera zurückgegebenen Puffers.heightOptionale 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:
nameDer eindeutige Trigger-Name.camerasIDs der Kameras.sensorPropertyIDID des Sensors mit dem Präfix der Sensorgruppe. Die Präfixoptionen sindVHALoderSENSOR_MANAGER.descriptionBeschreibung des Triggers, die auf der Benutzeroberfläche angezeigt wird.recordingLengthMsDauer nach dem Ereignis, die in Millisekunden aufgezeichnet werden soll.sensorValueTypeVom Sensor erzeugter Datentyp. Die Optionen sindINT,INT_ARRAY,FLOAT,FLOAT_ARRAYundBOOLEAN, STRING.thresholdTypeWie der Sensorwert mit demthresholdValueverglichen wird. Die Optionen sindAVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKundPEAK_HOLD.thresholdValueDer Wert, der mit dem Sensorwert verglichen wird.thresholdExtraFür einige Schwellenwerttypen wie „Bereich“ fürAVERAGEist ein zusätzlicher Wert erforderlich.triggerCooldownWartezeit 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,IRecorderModuleundITriggerModuledefiniert und überDashcamServiceAPIfürDashcamManagerverfü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:
IRecorderModulebisrecording_moduleIStreamModulebisstreaming_moduleITriggerModulebistrigger_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.