Intégrer Dashcam

L'application Caméra embarquée est conçue pour s'intégrer à AAOS. Elle offre aux conducteurs des fonctionnalités d'enregistrement vidéo pour renforcer la sécurité. Ce guide décrit les exigences techniques, les étapes d'intégration et les bonnes pratiques à suivre pour assurer une implémentation réussie.

Prérequis

Avant de continuer, vérifiez que les conditions préalables suivantes sont remplies:

SDK:

  • Le SDK 31 ou version ultérieure est requis.

Matériel :

  • Caméras EVS ou Camera2 disponibles pour AAOS.
  • Un espace de stockage interne suffisant ou la prise en charge d'un stockage externe amovible
    doit être disponible pour les enregistrements vidéo.

Configuration logicielle requise:

  • Assistance non groupée. Pour en savoir plus, consultez la section Applications non groupées.
  • Autorisations. La dashcam nécessite des autorisations système.

Obtenir le code source

Vous trouverez le code source dans la recherche de code Android à l'adresse:

https://cs.android.com/android/platform/superproject/+/ub-automotive-master-20250219:packages/apps/Car/Dashcam/

Le code source est fourni dans ces trois modules:

  • Service Dashcam Logiciels de streaming, d'enregistrement et de déclenchement.
  • Dashcam Manager Se connecte au service Dashcam et expose une API stable aux clients
  • Application Dashcam : application Dashcam de référence utilisant l'API Dashcam Manager

Schéma de l'architecture

Créer Dashcam

Utilisez Soong ou Gradle pour créer Dashcam.

Soong

Avant de compiler à partir de Soong, veillez à nettoyer les répertoires .cxx.

Sur Soong:

mma DashcamService DashcamManager-lib DashcamApp

Les APK se trouvent dans out/target/product/[lunch-target]/system/priv-app/

Gradle

Dans Gradle:

./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble

Les APK se trouvent dans out/aaos-apps-gradle-build/

Des instructions détaillées pour compiler Dashcam avec Gradle sont fournies dans le fichier README.

Autorisations

Plusieurs autorisations système sont requises pour le service Dashcam et l'application Dashcam.

Le moyen le plus simple d'accorder ces autorisations consiste à les inclure dans une configuration prédéfinie à l'aide de Blueprint ou de Make.

Dans Blueprint:

Android.bp
android_app_import {
    name: "DashcamApp-prebuilt",
    apk: "DashcamApp.apk",
    privileged: true,
    certificate: "platform",
    required: ["allowed_privapp_com.android.car.dashcam"],
}

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

Créez un fichier d'autorisations nommé 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>

Ajoutez les autorisations du fichier manifeste au fichier d'autorisations.

Pour en savoir plus, consultez la section Précompilé dans une image système.

Téléchargement indépendant

Le fichier d'autorisations peut également être installé en mode hors connexion. Utilisez cette méthode lorsque la caméra embarquée prédéfinie n'est pas configurée.

À l'aide du fichier d'autorisations créé précédemment dans la section "Précompilés", exécutez la commande suivante:

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

Configurer des superpositions

Le service de caméra embarquée dispose de configurations superposables.

Configuration de service

dashcam-service/res/values/config.xml

Ce fichier contient les configurations du service:

  • allow_internal_storage Autoriser les enregistrements sur le stockage interne
  • save_location Nom du répertoire dans lequel enregistrer les enregistrements. La valeur par défaut est caméra embarquée.
  • max_storage_mb Espace de stockage autorisé pour la caméra embarquée
  • max_age_days Durée de conservation d'un fichier avant l'élagage
  • boot_startup_enabled Démarrage du service Dashcam au démarrage de l'appareil
  • notifications_on Afficher les notifications lorsque l'enregistrement commence
  • native_recorder Utiliser les API NDK, par défaut les API Java
  • native_renderer Utiliser les API NDK, par défaut les API Java
  • default_app_component Application de caméra embarquée par défaut. Cette application dispose d'un accès aux enregistrements globaux et d'un accès aux déclencheurs globaux.
  • recording_module ComponentName de l'implémentation IRecordingModule
  • streaming_module ComponentName de l'implémentation IRecordingModule
  • trigger_module ComponentName de l'implémentation IRecordingModule

Configurer un déclencheur

Pour déclencher la configuration, exécutez la commande suivante:

dashcam-service/src/assets/config.xml

Ce fichier contient les configurations des déclencheurs d'enregistrement. La configuration du déclencheur se compose de deux parties:

  • ID du pré-roll ID de la caméra (EVS ou Camera2, selon la compatibilité).

  • prerollLengthMs Durée du pré-roll à stocker avec chaque événement.

<Preroll>
  <Camera
      ID="0"
      prerollLengthMs="10000" />
</Preroll>

Cet exemple montre l'ID de caméra 0 avec un pré-roll de 10 secondes.

  • name Nom unique du déclencheur

  • camera ID de la caméra (EVS ou Camera2, selon la compatibilité)

  • sensorPropertyID : ID du capteur

  • description Description du déclencheur affichée dans l'interface utilisateur

  • recordingLengthMs Durée après l'événement à enregistrer, en millisecondes.

  • sensorType Quel type de capteur ? Les options sont VHAL ou SENSOR_MANAGER.

  • sensorValueType Type de données produites par le capteur. Les options sont INT, INT_ARRAY, FLOAT, FLOAT_ARRAY et BOOLEAN, STRING.

  • thresholdType Comment évaluer la valeur du capteur. Les options sont AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK et PEAK_HOLD.

  • thresholdValue Valeur à comparer à la valeur du capteur avec le type de seuil

  • thresholdExtra Valeur supplémentaire requise pour certains types de seuils, tels que la plage pour AVERAGE

  • triggerCooldown Temps de pause avant de déclencher un autre événement de ce type en millisecondes.

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

Cet exemple montre un capteur VHAL produisant des valeurs entières dans lesquelles nous comparons une égalité à la valeur de seuil. Lorsque la condition d'égalité est remplie, un déclencheur enregistre sur les caméras 1 et 2.

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

Cet exemple montre un capteur VHAL produisant des valeurs à virgule flottante, où nous évaluons la moyenne sur une plage d'échantillons par rapport à la valeur de seuil. La plage d'échantillonnage est définie dans thresholdExtra.

Modules

Le service Dashcam se compose de trois modules:

  • Stream contient la logique de gestion des flux des caméras.

  • Enregistrement contient la logique de gestion des enregistrements.

  • Déclencheur contient la logique de déclenchement d'un enregistrement à partir des données des capteurs. Les API du module sont définies dans leurs interfaces correspondantes, IStreamModule, IRecorderModule et ITriggerModule, et exposées à DashcamManager via DashcamServiceAPI.

Modules de superposition

Le service Dashcam utilise dashcam-service/res/values/config.xml pour déterminer l'emplacement des implémentations de module. Nous fournissons des implémentations par défaut pour chaque module. Toutefois, chaque module peut être superposé en définissant son composant dans la valeur de configuration correspondante.

  • Définissez le nom du composant d'implémentation OEM de IRecorderModule sur recording_module.

  • Définissez le nom du composant d'implémentation OEM de IStreamModule sur le module de streaming.

  • Définissez le nom du composant d'implémentation OEM de ITriggerModule sur trigger_module.

    Au moment de l'exécution, le service Dashcam instancie le nom du composant défini dans config.xml pour chaque module.

Guide du développeur d'applications

Dashcam est une solution de caméra embarquée et personnalisable prête pour la production. La dashcam utilise les API Dashcam Manager pour communiquer avec Dashcam service. L'API Dashcam Manager est disponible sur IDashcamManager. Toute application disposant des autorisations requises peut utiliser Dashcam Manager.

Autorisations

Camera2 et EVS sont compatibles.

Moteur de jeu prédéfini

Le moyen le plus simple d'accorder ces autorisations consiste à les inclure dans la configuration prédéfinie à l'aide de Blueprint ou de Make.

OverlayUI

L'application peut être personnalisée avec des superpositions de ressources d'exécution. Pour en savoir plus, consultez la section Superpositions de ressources d'exécution. Pour consulter la liste des éléments superposables, consultez overlayable.xml.

Déclencheurs étendus

Les déclencheurs peuvent être étendus pour la session en cours avec un appel à DashcamManager.addTrigger(). Les déclencheurs ajoutés ne persistent que pour la session en cours.

Démarrage automatique

L'enregistrement automatique n'est pas disponible. Toutefois, un déclencheur manuel peut être démarré onBoot avec un appel à DashcamManager.startRecording().

Bonnes pratiques

  • Stockage. Nous vous recommandons vivement d'utiliser un stockage externe amovible.

  • Expérience utilisateur Concevez l'interface utilisateur de l'application Dashcam pour qu'elle soit intuitive et conviviale, en respectant les consignes de conception d'AAOS.

  • Optimisation des performances Optimisez les performances de l'application pour réduire l'utilisation des ressources et assurer un fonctionnement fluide dans AAOS.

Dépannage

  • Problèmes de connectivité de la caméra EVS ou Camera2 doivent être compatibles et disponibles dans l'IVI AAOS.

  • Erreurs de stockage. Vérifier l'espace de stockage disponible et gérer les enregistrements Nous vous recommandons vivement d'utiliser un espace de stockage externe, car l'utilisation du stockage interne peut entraîner une usure prématurée de l'espace de stockage.