Приложение Dashcam предназначено для интеграции с AAOS, предоставляя водителям возможность записи видео для повышения безопасности и защиты. В этом руководстве описаны технические требования, этапы интеграции и лучшие практики для обеспечения успешного внедрения.
Предварительные условия
Прежде чем продолжить, убедитесь, что выполнены следующие предварительные условия:
SDK:
- Требуется SDK 31 или выше.
Аппаратное обеспечение:
- Камеры EVS или Camera2 доступны для AAOS.
- Достаточное внутреннее пространство для хранения или поддержка съемного внешнего хранилища.
должна быть доступна для видеозаписи.
Требования к программному обеспечению:
- Некомплексная поддержка. Дополнительную информацию см. в разделе Несвязанные приложения .
- Разрешения. Dashcam требует системных разрешений.
Получить исходный код
Dashcam является частью отдельных приложений AAOS. Чтобы проверить несвязанный код, см. раздел «Проверка кода» .
Просмотрите исходный код с помощью Android Code Search .
Исходный код предоставляется в этих трех модулях:
- Сервис видеорегистраторов. Логика потоковой передачи, записи и запуска.
- Менеджер видеорегистратора. Подключается к сервису Dashcam и предоставляет клиентам стабильный API.
- Приложение видеорегистратора. Эталонное приложение Dashcam с использованием API Dashcam Manager
Сборка видеорегистратора
Используйте Soong или Gradle для создания видеорегистратора.
Сунг
Он Сунг:
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"],
}
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,
}
В Сделать:
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>
Добавьте разрешения из манифеста в файл разрешений.
Прежде чем использовать Dashcam, предварительно предоставьте разрешения Camera2 для службы Dashcam, как показано в разделе «Камера AAOS» .
Добавьте предварительно предоставленный файл разрешений в файл 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 имеет накладываемые конфигурации.
Конфигурация сервиса
dashcam-service/res/values/config.xml
Этот файл содержит конфигурации сервиса:
-
config_file
Имя файла конфигурации триггера в/assets
-
allow_internal_storage
Разрешить сохранение записей во внутренней памяти -
boot_startup_enabled
Запуск службы видеорегистратора при загрузке устройства -
notifications_on
Показывать уведомления при начале записи -
default_app_component
Приложение видеорегистратора по умолчанию, которое имеет глобальный доступ к записям и глобальный доступ к триггерам. -
recording_module
Имя компонента реализацииIRecordingModule
-
streaming_module
Имя компонента реализацииIStreamingModule
-
trigger_module
Имя компонента реализацииITriggerModule
Конфигурация триггера
Чтобы настроить триггеры записи, создайте копию:
dashcam-service/src/assets/config.xml
и добавьте это в каталог ресурсов. Укажите этот файл в элементе 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>
В этом примере показан идентификатор камеры EVS:1 с 10-секундным предварительным просмотром в разрешении 1080p и идентификатор камеры 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
Дополнительное значение, необходимое для некоторых типов порогов, таких как диапазон для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
.
Модули
Сервис Dashcam состоит из трех модулей:
Stream содержит логику обработки потоков с камер.
Запись содержит логику обработки записей.
Триггер содержит логику для запуска записи по данным датчиков. API-интерфейсы модулей определены в соответствующих интерфейсах
IStreamModule
,IRecorderModule
иITriggerModule
и доступны дляDashcamManager
черезDashcamServiceAPI
.
Наложение модулей
Служба Dashcam использует dashcam-service/res/values/config.xml
чтобы определить, где найти реализации модуля. Реализации по умолчанию предоставляются для каждого модуля. Однако каждый модуль можно наложить, установив его компонент в соответствующем значении конфигурации.
Установите имя компонента реализации OEM:
-
IRecorderModule
дляrecording_module
-
IStreamModule
дляstreaming_module
-
ITriggerModule
вtrigger_module
Во время выполнения служба Dashcam создает экземпляр имени компонента, установленного в 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.
Ошибки хранения. Проверьте доступное место для хранения и управляйте записями. Настоятельно рекомендуется использовать внешнее хранилище, поскольку использование внутреннего хранилища может привести к преждевременному износу хранилища.
Приложение Dashcam предназначено для интеграции с AAOS, предоставляя водителям возможность записи видео для повышения безопасности и защиты. В этом руководстве описаны технические требования, этапы интеграции и лучшие практики для обеспечения успешного внедрения.
Предварительные условия
Прежде чем продолжить, убедитесь, что выполнены следующие предварительные условия:
SDK:
- Требуется SDK 31 или выше.
Аппаратное обеспечение:
- Камеры EVS или Camera2 доступны для AAOS.
- Достаточное внутреннее пространство для хранения или поддержка съемного внешнего хранилища.
должна быть доступна для видеозаписи.
Требования к программному обеспечению:
- Некомплексная поддержка. Дополнительную информацию см. в разделе Несвязанные приложения .
- Разрешения. Dashcam требует системных разрешений.
Получить исходный код
Dashcam является частью отдельных приложений AAOS. Чтобы проверить несвязанный код, см. раздел «Проверка кода» .
Просмотрите исходный код с помощью Android Code Search .
Исходный код предоставляется в этих трех модулях:
- Сервис видеорегистраторов. Логика потоковой передачи, записи и запуска.
- Менеджер видеорегистратора. Подключается к сервису Dashcam и предоставляет клиентам стабильный API.
- Приложение видеорегистратора. Эталонное приложение Dashcam с использованием API Dashcam Manager
Сборка видеорегистратора
Используйте Soong или Gradle для создания видеорегистратора.
Сунг
Он Сунг:
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"],
}
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,
}
В Сделать:
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>
Добавьте разрешения из манифеста в файл разрешений.
Прежде чем использовать Dashcam, предварительно предоставьте разрешения Camera2 для службы Dashcam, как показано в разделе «Камера AAOS» .
Добавьте предварительно предоставленный файл разрешений в файл 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 имеет накладываемые конфигурации.
Конфигурация сервиса
dashcam-service/res/values/config.xml
Этот файл содержит конфигурации сервиса:
-
config_file
Имя файла конфигурации триггера в/assets
-
allow_internal_storage
Разрешить сохранение записей во внутренней памяти -
boot_startup_enabled
Запуск службы видеорегистратора при загрузке устройства -
notifications_on
Показывать уведомления при начале записи -
default_app_component
Приложение видеорегистратора по умолчанию, которое имеет глобальный доступ к записям и глобальный доступ к триггерам. -
recording_module
Имя компонента реализацииIRecordingModule
-
streaming_module
Имя компонента реализацииIStreamingModule
-
trigger_module
Имя компонента реализацииITriggerModule
Конфигурация триггера
Чтобы настроить триггеры записи, создайте копию:
dashcam-service/src/assets/config.xml
и добавьте это в каталог ресурсов. Укажите этот файл в элементе 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>
В этом примере показан идентификатор камеры EVS:1 с 10-секундным предварительным просмотром в разрешении 1080p и идентификатор камеры 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
Дополнительное значение, необходимое для некоторых типов порогов, таких как диапазон для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
.
Модули
Сервис Dashcam состоит из трех модулей:
Stream содержит логику обработки потоков с камер.
Запись содержит логику обработки записей.
Триггер содержит логику для запуска записи по данным датчиков. API-интерфейсы модулей определены в соответствующих интерфейсах
IStreamModule
,IRecorderModule
иITriggerModule
и доступны дляDashcamManager
черезDashcamServiceAPI
.
Наложение модулей
Служба Dashcam использует dashcam-service/res/values/config.xml
чтобы определить, где найти реализации модуля. Реализации по умолчанию предоставляются для каждого модуля. Однако каждый модуль можно наложить, установив его компонент в соответствующем значении конфигурации.
Установите имя компонента реализации OEM:
-
IRecorderModule
дляrecording_module
-
IStreamModule
дляstreaming_module
-
ITriggerModule
вtrigger_module
Во время выполнения служба Dashcam создает экземпляр имени компонента, установленного в 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.
Ошибки хранения. Проверьте доступное место для хранения и управляйте записями. Настоятельно рекомендуется использовать внешнее хранилище, поскольку использование внутреннего хранилища может привести к преждевременному износу хранилища.
Приложение Dashcam предназначено для интеграции с AAOS, предоставляя водителям возможность записи видео для повышения безопасности и защиты. В этом руководстве описаны технические требования, этапы интеграции и лучшие практики для обеспечения успешного внедрения.
Предварительные условия
Прежде чем продолжить, убедитесь, что выполнены следующие предварительные условия:
SDK:
- Требуется SDK 31 или выше.
Аппаратное обеспечение:
- Камеры EVS или Camera2 доступны для AAOS.
- Достаточное внутреннее пространство для хранения или поддержка съемного внешнего хранилища.
должна быть доступна для видеозаписи.
Требования к программному обеспечению:
- Некомплексная поддержка. Дополнительную информацию см. в разделе Несвязанные приложения .
- Разрешения. Dashcam требует системных разрешений.
Получить исходный код
Dashcam является частью отдельных приложений AAOS. Чтобы проверить несвязанный код, см. раздел «Проверка кода» .
Просмотрите исходный код с помощью Android Code Search .
Исходный код предоставляется в этих трех модулях:
- Сервис видеорегистраторов. Логика потоковой передачи, записи и запуска.
- Менеджер видеорегистратора. Подключается к сервису Dashcam и предоставляет клиентам стабильный API.
- Приложение видеорегистратора. Эталонное приложение Dashcam с использованием API Dashcam Manager
Сборка видеорегистратора
Используйте Soong или Gradle для создания видеорегистратора.
Сунг
Он Сунг:
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"],
}
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,
}
В Сделать:
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>
Добавьте разрешения из манифеста в файл разрешений.
Прежде чем использовать Dashcam, предварительно предоставьте разрешения Camera2 для службы Dashcam, как показано в разделе «Камера AAOS» .
Добавьте предварительно предоставленный файл разрешений в файл 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 имеет накладываемые конфигурации.
Конфигурация сервиса
dashcam-service/res/values/config.xml
Этот файл содержит конфигурации сервиса:
-
config_file
Имя файла конфигурации триггера в/assets
-
allow_internal_storage
Разрешить сохранение записей во внутренней памяти -
boot_startup_enabled
Запуск службы видеорегистратора при загрузке устройства -
notifications_on
Показывать уведомления при начале записи -
default_app_component
Приложение видеорегистратора по умолчанию, которое имеет глобальный доступ к записям и глобальный доступ к триггерам. -
recording_module
Имя компонента реализацииIRecordingModule
-
streaming_module
Имя компонента реализацииIStreamingModule
-
trigger_module
Имя компонента реализацииITriggerModule
Конфигурация триггера
Чтобы настроить триггеры записи, создайте копию:
dashcam-service/src/assets/config.xml
и добавьте это в каталог ресурсов. Укажите этот файл в элементе 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>
В этом примере показан идентификатор камеры EVS:1 с 10-секундным предварительным просмотром в разрешении 1080p и идентификатор камеры 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
Дополнительное значение, необходимое для некоторых типов порогов, таких как диапазон для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
.
Модули
Сервис Dashcam состоит из трех модулей:
Stream содержит логику обработки потоков с камер.
Запись содержит логику обработки записей.
Триггер содержит логику для запуска записи по данным датчиков. API-интерфейсы модулей определены в соответствующих интерфейсах
IStreamModule
,IRecorderModule
иITriggerModule
и доступны дляDashcamManager
черезDashcamServiceAPI
.
Наложение модулей
Служба Dashcam использует dashcam-service/res/values/config.xml
чтобы определить, где найти реализации модуля. Реализации по умолчанию предоставляются для каждого модуля. Однако каждый модуль можно наложить, установив его компонент в соответствующем значении конфигурации.
Установите имя компонента реализации OEM:
-
IRecorderModule
дляrecording_module
-
IStreamModule
дляstreaming_module
-
ITriggerModule
вtrigger_module
Во время выполнения служба Dashcam создает экземпляр имени компонента, установленного в 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.
Ошибки хранения. Проверьте доступное место для хранения и управляйте записями. Настоятельно рекомендуется использовать внешнее хранилище, поскольку использование внутреннего хранилища может привести к преждевременному износу хранилища.
Приложение Dashcam предназначено для интеграции с AAOS, предоставляя водителям возможность записи видео для повышения безопасности и защиты. В этом руководстве описаны технические требования, этапы интеграции и лучшие практики для обеспечения успешного внедрения.
Предварительные условия
Прежде чем продолжить, убедитесь, что выполнены следующие предварительные условия:
SDK:
- Требуется SDK 31 или выше.
Аппаратное обеспечение:
- Камеры EVS или Camera2 доступны для AAOS.
- Достаточное внутреннее пространство для хранения или поддержка съемного внешнего хранилища.
должна быть доступна для видеозаписи.
Требования к программному обеспечению:
- Некомплексная поддержка. Дополнительную информацию см. в разделе Несвязанные приложения .
- Разрешения. Dashcam требует системных разрешений.
Получить исходный код
Dashcam является частью отдельных приложений AAOS. Чтобы проверить несвязанный код, см. раздел «Проверка кода» .
Просмотрите исходный код с помощью Android Code Search .
Исходный код предоставляется в этих трех модулях:
- Сервис видеорегистраторов. Логика потоковой передачи, записи и запуска.
- Менеджер видеорегистратора. Подключается к сервису Dashcam и предоставляет клиентам стабильный API.
- Приложение видеорегистратора. Эталонное приложение Dashcam с использованием API Dashcam Manager
Сборка видеорегистратора
Используйте Soong или Gradle для создания видеорегистратора.
Сунг
Он Сунг:
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"],
}
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,
}
В Сделать:
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>
Добавьте разрешения из манифеста в файл разрешений.
Прежде чем использовать Dashcam, предварительно предоставьте разрешения Camera2 для службы Dashcam, как показано в разделе «Камера AAOS» .
Добавьте предварительно предоставленный файл разрешений в файл 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 имеет накладываемые конфигурации.
Конфигурация сервиса
dashcam-service/res/values/config.xml
Этот файл содержит конфигурации сервиса:
-
config_file
Имя файла конфигурации триггера в/assets
-
allow_internal_storage
Разрешить сохранение записей во внутренней памяти -
boot_startup_enabled
Запуск службы видеорегистратора при загрузке устройства -
notifications_on
Показывать уведомления при начале записи -
default_app_component
Приложение видеорегистратора по умолчанию, которое имеет глобальный доступ к записям и глобальный доступ к триггерам. -
recording_module
Имя компонента реализацииIRecordingModule
-
streaming_module
Имя компонента реализацииIStreamingModule
-
trigger_module
Имя компонента реализацииITriggerModule
Конфигурация триггера
Чтобы настроить триггеры записи, создайте копию:
dashcam-service/src/assets/config.xml
и добавьте это в каталог ресурсов. Укажите этот файл в элементе 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>
В этом примере показан идентификатор камеры EVS:1 с 10-секундным предварительным просмотром в разрешении 1080p и идентификатор камеры 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
Дополнительное значение, необходимое для некоторых типов порогов, таких как диапазон для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
.
Модули
Сервис Dashcam состоит из трех модулей:
Stream содержит логику обработки потоков с камер.
Запись содержит логику обработки записей.
Триггер содержит логику для запуска записи по данным датчиков. API-интерфейсы модулей определены в соответствующих интерфейсах
IStreamModule
,IRecorderModule
иITriggerModule
и доступны дляDashcamManager
черезDashcamServiceAPI
.
Наложение модулей
Служба Dashcam использует dashcam-service/res/values/config.xml
чтобы определить, где найти реализации модуля. Реализации по умолчанию предоставляются для каждого модуля. Однако каждый модуль можно наложить, установив его компонент в соответствующем значении конфигурации.
Установите имя компонента реализации OEM:
-
IRecorderModule
дляrecording_module
-
IStreamModule
дляstreaming_module
-
ITriggerModule
вtrigger_module
Во время выполнения служба Dashcam создает экземпляр имени компонента, установленного в config.xml
, для каждого модуля.
Руководство разработчика приложений
Dashcam — это готовое к производству и настраиваемое решение для видеорегистраторов. Dashcam использует API-интерфейсы Dashcam Manager для связи со Dashcam service
. API Dashcam Manager можно найти по адресу IDashcamManager
. Любое приложение с необходимыми разрешениями может использовать Dashcam Manager.
Оверлейный интерфейс
Приложение можно настроить с помощью наложений ресурсов среды выполнения. Дополнительные сведения см. в разделе Наложения ресурсов среды выполнения . Чтобы просмотреть список накладываемых элементов, см. файл overlayable.xml .
Расширить триггеры
Триггеры можно расширить для текущего сеанса с помощью вызова DashcamManager#addTrigger()
. Добавленные триггеры сохраняются только для текущего сеанса.
Автозапуск
Автозапуск записи не поддерживается. Тем не менее, ручной триггер можно начать onBoot
с вызовом DashcamManager.startRecording()
Лучшие практики
Хранилище. Внешнее съемное хранилище настоятельно рекомендуется.
Пользовательский опыт. Создайте пользовательский интерфейс приложения Dashcam, чтобы быть интуитивно понятным и удобным для пользователя, придерживаясь руководящих принципов проектирования AAOS.
Оптимизация производительности. Оптимизируйте производительность приложения, чтобы минимизировать использование ресурсов и обеспечить плавную работу в AAO.
Поиск неисправностей
Проблемы с подключением к камере. EVS или Camera2 должны быть поддержаны и доступны в AAOS IVI.
Ошибки хранения. Проверьте доступное место для хранения и управляйте записями. Внешнее хранилище настоятельно рекомендуется, поскольку использование внутреннего хранилища может преждевременно привести к изнашиванию.