Интегрируйте видеорегистратор

Приложение Dashcam предназначено для интеграции с AAOS, предоставляя водителям возможность записи видео для повышения безопасности и защиты. В этом руководстве описаны технические требования, этапы интеграции и лучшие практики для обеспечения успешного внедрения.

Предварительные условия

Прежде чем продолжить, убедитесь, что выполнены следующие предварительные условия:

SDK:

  • Требуется SDK 31 или выше.

Аппаратное обеспечение:

  • Камеры EVS или Camera2 доступны для AAOS.
  • Достаточное внутреннее пространство для хранения или поддержка съемного внешнего хранилища.
    должна быть доступна для видеозаписи.

Требования к программному обеспечению:

  • Некомплексная поддержка. Дополнительную информацию см. в разделе Несвязанные приложения .
  • Разрешения. Dashcam требует системных разрешений.

Получить исходный код

Найдите исходный код в Android Code Search по адресу:

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

Исходный код предоставляется в этих трех модулях:

  • Сервис видеорегистраторов. Логика потоковой передачи, записи и запуска.
  • Менеджер видеорегистратора. Подключается к сервису Dashcam и предоставляет клиентам стабильный API.
  • Приложение видеорегистратора. Эталонное приложение Dashcam с использованием API Dashcam Manager

Схема архитектуры

Сборка видеорегистратора

Используйте Soong или Gradle для создания видеорегистратора.

Сунг

Перед сборкой из Soong обязательно очистите каталоги .cxx .

Он Сунг:

mma DashcamService DashcamManager-lib DashcamApp

APK-файлы расположены в out/target/product/[lunch-target]/system/priv-app/

Градл

В Градле:

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

APK-файлы находятся в out/aaos-apps-gradle-build/

Подробные инструкции по сборке Dashcam с помощью Gradle приведены в файле README .

Разрешения

Для службы Dashcam и приложения Dashcam требуются некоторые системные разрешения.

Самый простой способ предоставить эти разрешения — включить их в предварительно созданную настройку с помощью Blueprint или Make.

В проекте:

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

В Сделать:

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 \

Создайте файл разрешений с именем 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>

Добавьте разрешения из манифеста в файл разрешений.

Дополнительные сведения см. в разделе « Предварительно встроено в образ системы».

Боковая загрузка

Файл разрешений также можно загрузить неопубликовано. Используйте этот метод, если встроенный видеорегистратор не настроен.

Используя файл разрешений, созданный ранее в разделе «Предварительные сборки», запустите:

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

Настройка наложений

Сервис Dashcam имеет накладываемые конфигурации.

Конфигурация сервиса

dashcam-service/res/values/config.xml

Этот файл содержит конфигурации сервиса:

  • allow_internal_storage Разрешить запись во внутреннюю память
  • save_location Имя каталога для сохранения записей. По умолчанию видеорегистратор
  • max_storage_mb Какой объем памяти можно использовать видеорегистратору
  • max_age_days Как долго хранить файл перед обрезкой
  • boot_startup_enabled Запуск службы видеорегистратора при загрузке устройства
  • notifications_on Показывать уведомления при начале записи
  • native_recorder Использовать API-интерфейсы NDK, по умолчанию API-интерфейсы Java.
  • native_renderer Использовать API-интерфейсы NDK, по умолчанию API-интерфейсы Java.
  • default_app_component Приложение видеорегистратора по умолчанию. Это приложение имеет глобальный доступ к записям и глобальный доступ к триггерам.
  • recording_module Имя компонента реализации IRecordingModule
  • streaming_module Имя компонента реализации IRecordingModule
  • trigger_module Имя компонента реализации IRecordingModule

Настройка триггера

Чтобы активировать конфигурацию, запустите:

dashcam-service/src/assets/config.xml

Этот файл содержит конфигурации для триггеров записи. Конфигурация триггера состоит из двух частей:

  • Предварительный идентификатор. Идентификатор камеры: EVS или Camera2, в зависимости от того, что поддерживается.

  • prerollLengthMs Длина преролла, сохраняемого с каждым событием.

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

В этом примере показан идентификатор камеры 0 с 10-секундной предварительной прокруткой.

  • name Уникальное имя триггера

  • camera Идентификатор камеры: EVS или Camera2, в зависимости от того, что поддерживается.

  • sensorPropertyID Идентификатор датчика

  • description Описание триггера, отображаемого в пользовательском интерфейсе.

  • recordingLengthMs Продолжительность записи после события в миллисекундах.

  • sensorType Какой тип датчика. Варианты: VHAL или SENSOR_MANAGER

  • sensorValueType Тип данных, создаваемых датчиком. Возможные варианты: INT , INT_ARRAY , FLOAT , FLOAT_ARRAY и BOOLEAN, STRING

  • thresholdType Как оценить значение датчика. Возможные варианты: AVERAGE , BOOLEAN , EQUALS , LEAP , LEAP_AVERAGE , LEAP_OVER , PEAK и PEAK_HOLD

  • thresholdValue Значение для сравнения значения датчика с типом порогового значения.

  • thresholdExtra значение, необходимое для некоторых типов порогов, таких как диапазон для AVERAGE

  • triggerCooldown Время восстановления перед запуском другого события этого типа в миллисекундах.

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

В этом примере показан датчик VHAL, выдающий целочисленные значения, где мы сравниваем равенство с пороговым значением. При выполнении условия равенства триггер осуществляет запись на камеры 1 и 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"/>

В этом примере показан датчик VHAL, выдающий значения с плавающей запятой, где мы оцениваем среднее значение по диапазону выборок по пороговому значению. Диапазон выборки устанавливается в thresholdExtra

Модули

Сервис Dashcam состоит из трех модулей:

  • Stream содержит логику обработки потоков с камер.

  • Запись содержит логику обработки записей.

  • Триггер содержит логику для запуска записи по данным датчиков. API-интерфейсы модулей определены в соответствующих интерфейсах IStreamModule , IRecorderModule и ITriggerModule и доступны для DashcamManager через DashcamServiceAPI

Наложение модулей

Служба Dashcam использует dashcam-service/res/values/config.xml чтобы определить, где найти реализации модуля. Мы предоставляем реализации по умолчанию для каждого модуля. Однако каждый модуль можно наложить, установив его компонент в соответствующем значении конфигурации.

  • Установите для имени OEM-компонента реализации IRecorderModule значение recording_module

  • Задайте имя OEM-компонента реализации IStreamModule для модуля потоковой передачи.

  • Установите имя OEM-компонента реализации ITriggerModule на trigger_module

    Во время выполнения служба Dashcam создает экземпляр имени компонента, установленного в config.xml , для каждого модуля.

Руководство разработчика приложений

Dashcam — это готовое к производству и настраиваемое решение для видеорегистраторов. Dashcam использует API-интерфейсы Dashcam Manager для связи со Dashcam service . API Dashcam Manager можно найти по адресу IDashcamManager . Любое приложение с необходимыми разрешениями может использовать Dashcam Manager.

Разрешения

Поддерживаются Camera2 и EVS.

Готовый

Самый простой способ предоставить эти разрешения — включить их в готовые настройки с помощью Blueprint или Make.

Оверлейный интерфейс

Приложение можно настроить с помощью наложений ресурсов среды выполнения. Дополнительные сведения см. в разделе Наложения ресурсов среды выполнения . Чтобы просмотреть список накладываемых элементов, см. файл overlayable.xml .

Расширить триггеры

Триггеры можно расширить для текущего сеанса с помощью вызова DashcamManager.addTrigger() . Добавленные триггеры сохраняются только для текущего сеанса.

Автозапуск

Автозапуск записи не поддерживается. Однако ручной триггер можно запустить onBoot с помощью вызова DashcamManager.startRecording()

Лучшие практики

  • Хранилище. Настоятельно рекомендуется использовать внешний съемный накопитель.

  • Пользовательский опыт. Создайте пользовательский интерфейс приложения Dashcam, чтобы он был интуитивно понятным и удобным для пользователя, в соответствии с рекомендациями по проектированию AAOS.

  • Оптимизация производительности. Оптимизируйте производительность приложения, чтобы минимизировать использование ресурсов и обеспечить бесперебойную работу в AAOS.

Поиск неисправностей

  • Проблемы с подключением камеры. EVS или Camera2 должны поддерживаться и быть доступны в AAOS IVI.

  • Ошибки хранения. Проверьте доступное место для хранения и управляйте записями. Настоятельно рекомендуется использовать внешнее хранилище, поскольку использование внутреннего хранилища может привести к преждевременному износу хранилища.