Приложение Dashcam разработано для интеграции с AAOS, предоставляя водителям возможность видеозаписи для повышения безопасности. В этом руководстве описаны технические требования, этапы интеграции и лучшие практики для обеспечения успешной реализации.
Предварительные требования
Прежде чем продолжить, убедитесь, что выполнены следующие условия:
SDK:
- Требуется SDK версии 31 или выше.
Аппаратное обеспечение:
- Камеры EVS или Camera2 доступны для AAOS.
- Достаточное внутреннее пространство для хранения или опора для съемных внешних накопителей.
должен быть доступен для видеозаписи.
Требования к программному обеспечению:
- Поддержка отдельных приложений. Для получения дополнительной информации см. раздел «Отдельные приложения» .
- Права доступа. Видеорегистратору требуются системные права доступа.
Получите исходный код
Видеорегистратор входит в состав отдельных приложений AAOS. Чтобы получить доступ к коду, перейдите по ссылке «Получить код» .
Просматривайте исходный код с помощью Android Code Search .
Исходный код представлен в этих трех модулях:
- Сервис видеорегистраторов. Потоковая передача, запись и логика запуска.
- Менеджер видеорегистраторов. Подключается к сервису видеорегистраторов и предоставляет клиентам стабильный API.
- Приложение «Видеорегистратор». Используйте API «Менеджер видеорегистратора» для связи с приложением «Видеорегистратор».

Собрать видеорегистратор
Используйте Soong или Gradle для сборки видеорегистратора.
Сунг
Он Сун:
mma DashcamService DashcamManager-lib DashcamApp
APK-файлы находятся в out/target/product/[lunch-target]/system/priv-app/
Грэдл
На Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
APK-файлы находятся в папке out/aaos-apps-gradle-build/
Подробные инструкции по сборке видеорегистратора с помощью Gradle приведены в файле README .
Разрешения
Для работы службы видеорегистратора и приложения видеорегистратора требуется ряд системных разрешений.
Самый простой способ предоставить эти разрешения — включить их в предварительно настроенную среду с помощью Blueprint или Make.
В проекте 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,
}
В 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 \
Создайте файл разрешений с именем 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>
Добавьте права доступа из манифеста в файл разрешений.
Перед использованием видеорегистратора предоставьте службе видеорегистратора разрешения Camera2, как показано в AAOS Camera .
Добавьте файл с предварительно предоставленными правами доступа в файл Blueprint или Make таким же образом, как и файл с правами доступа.
В файле 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>
В файле 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,
}
Для получения дополнительной информации см. разделы «Интеграция предварительно собранной системы в образ системы» и «Добавление списка разрешенных устройств ».
Боковая загрузка
Файл разрешений также можно загрузить вручную. Используйте этот метод, если предустановленный видеорегистратор не настроен.
Используя файл разрешений, созданный ранее в разделе предварительно собранных компонентов, выполните следующую команду:
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
Добавьте файл предварительных разрешений аналогично файлу etc/default-permissions/ .
Настройка наложений
Сервис видеорегистратора предлагает наложение конфигураций.
конфигурация службы
dashcam-service/res/values/config.xml
Этот файл содержит конфигурации для сервиса:
-
config_fileимя файла конфигурации триггера в каталоге/assets -
allow_internal_storageРазрешить сохранение записей во внутреннюю память -
boot_startup_enabledСлужба видеорегистратора запускается при загрузке устройства -
notifications_onОтображать уведомления при начале записи -
default_app_componentприложение видеорегистратора по умолчанию, имеющее глобальный доступ к записи и глобальный доступ к запуску записи. -
recording_moduleComponentName ofIRecordingModuleimplementation -
streaming_moduleComponentName реализацииIStreamingModule -
trigger_moduleComponentName ofITriggerModuleimplementation
Конфигурация триггера
Для настройки триггеров записи создайте копию следующего файла:
dashcam-service/src/assets/config.xml
и добавьте это в каталог assets. Укажите ссылку на этот файл в элементе config_file в файле конфигурации сервиса.
Конфигурация триггера включает в себя элементы хранения данных, камеры и триггера:
Хранилище
Конфигурация хранилища включает следующие элементы:
maxStorageUsagePercentМаксимальный процент доступного места в памяти видеорегистратора, используемого до удаления записей.maxStorageUsageMegabytesМаксимальный объем памяти в мегабайтах, используемый видеорегистратором до удаления записей.maxAgeHoursBeforePruneМаксимальное количество часов, после которого запись удаляется. Запись может быть удалена раньше, если достигнуты лимиты объема хранилища.
Камера
Конфигурация камеры включает следующие элементы:
Идентификатор камеры. Идентификатор камеры с префиксом.
prerollLengthMsДлина предварительно скрученного ролика, которая будет храниться с каждым событием.widthнеобязательная ширина буфера, возвращаемого камерой.heightНеобязательная высота буфера, возвращаемого камерой.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
В этом примере показана камера с ID EVS:1 с 10-секундным прероллом в разрешении 1080p и камера с ID Camera2:1 с 10-секундным прероллом и стандартными шириной и высотой.
Курок
Конфигурация триггеров состоит из списка триггеров, определяемых следующими параметрами:
nameуникальное имя триггера.Идентификаторы
cameras.sensorPropertyID— идентификатор датчика с префиксом, указывающим на группу датчиков. Варианты префикса:VHALилиSENSOR_MANAGER.descriptionтриггера, отображаемого в пользовательском интерфейсе.recordingLengthMsДлительность записи события в миллисекундах.sensorValueTypeтип данных, получаемых от датчика. Возможные значения:INT,INT_ARRAY,FLOAT,FLOAT_ARRAY,BOOLEAN, STRING.thresholdTypeспособ сравнения значения датчика сthresholdValue. Доступные варианты:AVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKиPEAK_HOLD.thresholdValueзначение, сравниваемое со значением датчика.thresholdExtraдополнительное значение, необходимое для некоторых типов пороговых значений, например, для параметра range в значенииAVERAGE.triggerCooldown— время ожидания в миллисекундах перед запуском следующего события этого типа.
<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>
В этом примере показан триггер, в котором TriggerModule отслеживает показания датчика VHAL, генерирующего целочисленные значения. TriggerModule сравнивает их с пороговым значением. Когда условие равенства выполняется, срабатывает триггер, записывающий данные на камеры EVS 1 и 2.
<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"/>
В этом примере показан триггер, в котором TriggerModule отслеживает показания датчика VHAL, генерирующего значения с плавающей запятой. TriggerModule сравнивает среднее значение датчика за 10 выборок с пороговым значением 20.0 . Диапазон выборок задается в thresholdExtra . Новое событие может запускаться только каждые 2000 миллисекунд, как задано в параметре triggerCooldown .
Модули
Сервис видеорегистратора состоит из трех модулей:
Класс Stream содержит логику для обработки потоков данных с камер.
В модуле записи содержится логика обработки записей.
Модуль Trigger содержит логику для запуска записи на основе данных с датчиков. API модуля определены в соответствующих интерфейсах
IStreamModule,IRecorderModuleиITriggerModuleи доступны дляDashcamManagerчерезDashcamServiceAPI.
Модули наложения
Сервис видеорегистратора использует dashcam-service/res/values/config.xml для определения места расположения реализаций модулей. Для каждого модуля предоставляются реализации по умолчанию. Однако каждый модуль может быть переопределен путем установки его компонента в соответствующем значении конфигурации.
Укажите название компонента реализации OEM:
-
IRecorderModuleвrecording_module -
IStreamModuleдляstreaming_module -
ITriggerModuleвtrigger_module
Во время выполнения служба видеорегистратора создает экземпляр компонента с именем, заданным в config.xml для каждого модуля.
Руководство для разработчиков приложений
Dashcam — это готовое к использованию и настраиваемое решение для видеорегистраторов. Dashcam использует API Dashcam Manager для связи со Dashcam service . API Dashcam Manager можно найти по адресу IDashcamManager . Любое приложение с необходимыми разрешениями может использовать Dashcam Manager.
Оверлейный интерфейс
Приложение можно настроить с помощью наложений ресурсов во время выполнения. Для получения дополнительной информации см. раздел «Наложения ресурсов во время выполнения» . Список элементов, которые можно наложить, см. в файле overlayable.xml .
Расширить триггеры
Триггеры можно продлить для текущей сессии, вызвав метод DashcamManager#addTrigger() . Добавленные триггеры сохраняются только для текущей сессии.
Автозапуск
Автоматический запуск записи не поддерживается. Однако можно запустить запись вручную при onBoot , вызвав метод DashcamManager.startRecording()
Передовые методы
Хранение. Настоятельно рекомендуется использовать внешние съемные накопители.
Пользовательский опыт. Разработайте интуитивно понятный и удобный пользовательский интерфейс приложения Dashcam в соответствии с рекомендациями AAOS по дизайну.
Оптимизация производительности. Оптимизируйте производительность приложения, чтобы минимизировать потребление ресурсов и обеспечить бесперебойную работу в AAOS.
Поиск неисправностей
Проблемы с подключением камеры. Необходимо, чтобы EVS или Camera2 поддерживались и были доступны в AAOS IVI.
Ошибки хранения. Проверьте доступное место для хранения и управляйте записями. Настоятельно рекомендуется использовать внешнее хранилище, поскольку использование внутреннего хранилища может привести к преждевременному износу.