行车记录仪应用旨在与 AAOS 集成,为驾驶员提供视频录制功能,以增强安全性和保障性。本指南概述了技术要求、集成步骤和最佳实践,以确保成功实施。
前提条件
在继续操作之前,请确保满足以下先决条件
SDK
- 需要 SDK 31 或更高版本。
硬件
- 可用于 AAOS 的 EVS 或 Camera2 相机。
- 必须有足够的内部存储空间或支持可移动外部存储设备
用于视频录制。
软件要求
- 解绑支持。要了解详情,请参阅解绑应用。
- 权限。行车记录仪需要系统权限。
获取源代码
在 Android 代码搜索中查找源代码,网址为:
源代码在以下三个模块中提供
- 行车记录仪服务。流式传输、录制和触发逻辑。
- 行车记录仪管理器。连接到行车记录仪服务并向客户端公开稳定的 API
- 行车记录仪应用。使用行车记录仪管理器 API 的参考行车记录仪应用
构建行车记录仪
使用 Soong 或 Gradle 构建行车记录仪。
Soong
从 Soong 构建之前,请务必清理 .cxx
目录。
在 Soong 上
mma DashcamService DashcamManager-lib DashcamApp
APK 位于 out/target/product/[lunch-target]/system/priv-app/
中
Gradle
在 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"],
}
在 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 \
创建一个名为 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-service/res/values/config.xml
此文件包含服务的配置
allow_internal_storage
允许录制到内部存储空间save_location
用于保存录制内容的目录名称。默认为行车记录仪max_storage_mb
允许行车记录仪使用的最大存储空间max_age_days
在修剪文件之前保留文件的最长时间boot_startup_enabled
设备启动时启动行车记录仪服务notifications_on
开始录制时显示通知native_recorder
使用 NDK API,默认为 Java APInative_renderer
使用 NDK API,默认为 Java APIdefault_app_component
默认行车记录仪应用,此应用具有全局录制访问权限和全局触发访问权限recording_module
IRecordingModule 实现的 ComponentNamestreaming_module
IRecordingModule 实现的 ComponentNametrigger_module
IRecordingModule 实现的 ComponentName
配置触发器
要触发配置,请运行
dashcam-service/src/assets/config.xml
此文件包含录制触发器的配置。触发器配置由两部分组成
预滚 ID。摄像头的 ID,可以是 EVS 或 Camera2,具体取决于支持哪种。
prerollLengthMs
每次事件存储的预滚长度。
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
此示例显示了摄像头 ID 0,预滚为 10 秒。
name
唯一的触发器名称camera
摄像头的 ID,可以是 EVS 或 Camera2,具体取决于支持哪种sensorPropertyID
传感器的 IDdescription
UI 中显示的触发器说明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
中设置
模块
行车记录仪服务由三个模块组成
流包含处理来自摄像头的流的逻辑。
录制包含处理录制的逻辑。
触发器包含从传感器数据触发录制的逻辑。模块 API 在其对应的接口
IStreamModule
、IRecorderModule
和ITriggerModule
中定义,并通过DashcamServiceAPI
公开给 DashcamManager
叠加模块
行车记录仪服务使用 dashcam-service/res/values/config.xml
来确定在何处查找模块实现。我们为每个模块提供默认实现。但是,可以通过在相应的配置值中设置组件来叠加每个模块。
将 OEM 实现组件名称
IRecorderModule
设置为recording_module
将 OEM 实现组件名称
IStreamModule
设置为流式传输模块。将 OEM 实现组件名称
ITriggerModule
设置为trigger_module
在运行时,行车记录仪服务会实例化
config.xml
中为每个模块设置的组件名称。
应用开发者指南
行车记录仪是一种已投入生产且可自定义的行车记录仪解决方案。行车记录仪使用 Dashcam Manager API 与 Dashcam service
通信。Dashcam Manager API 可以在 IDashcamManager
中找到。任何具有所需权限的应用都可以使用 Dashcam Manager。
权限
支持 Camera2 和 EVS。
预构建
授予这些权限最简单的方法是使用 Blueprint 或 Make 将它们包含在预构建设置中。
OverlayUI
可以使用运行时资源叠加自定义应用。要了解详情,请参阅运行时资源叠加。要查看可叠加元素的列表,请参阅overlayable.xml。
扩展触发器
可以使用对 DashcamManager.addTrigger()
的调用为当前会话扩展触发器。添加的触发器仅在当前会话中持续存在。
自动启动
不支持自动启动录制。但是,可以使用对 DashcamManager.startRecording()
的调用在 onBoot
时启动手动触发器
最佳实践
存储。强烈建议使用外部可移动存储设备。
用户体验。将行车记录仪应用的 UI 设计为直观且用户友好,并遵循 AAOS 设计指南。
性能优化。优化应用的性能,以最大限度地减少资源使用,并确保在 AAOS 中平稳运行。
问题排查
摄像头连接问题。AAOS IVI 中必须支持和提供 EVS 或 Camera2。
存储错误。验证可用存储空间并管理录制内容。强烈建议使用外部存储设备,因为使用内部存储设备可能会过早导致存储设备磨损。