整合 Dashcam

Dashcam 應用程式旨在整合 AAOS,為駕駛人提供錄影功能,提升安全性。本指南將概略說明技術需求、整合步驟和最佳做法,確保導入作業順利進行。

必要條件

繼續操作前,請確認已符合下列先決條件:

SDK:

  • 需要 SDK 31 以上版本。

硬體:

  • AAOS 可使用 EVS 或 Camera2 攝影機。
  • 必須有足夠的內部儲存空間,或支援可移除的外部儲存空間
    ,才能錄製影片。

軟體需求:

取得原始碼

在 Android Code Search 中找出原始碼:

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

原始碼會在以下三個模組中提供:

  • 行車記錄器服務。串流、錄影和觸發邏輯。
  • Dashcam Manager連線至 Dashcam 服務,並向用戶端公開穩定的 API
  • Dashcam 應用程式:參考使用 Dashcam Manager API 的 Dashcam 應用程式

架構圖

建構 Dashcam

使用 Soong 或 Gradle 建構 Dashcam。

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/

README 檔案提供詳細的操作說明,說明如何使用 Gradle 建構 Dashcam。

權限

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"],
}

在 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">
      <permission name="" />
  </privapp-permissions>
  <privapp-permissions package="com.android.car.dashcam.app">
      <permission name="" />
  </privapp-permissions>
</permissions>

將資訊清單中的權限新增至權限檔案。

詳情請參閱「預先建構至系統映像檔。

側載

您也可以側載權限檔案。如果未設定預先建構的 Dashcam,請使用這個方法。

使用先前在預先建構部分建立的權限檔案,執行以下操作:

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 API
  • native_renderer 使用 NDK API,預設為 Java API
  • default_app_component 預設的車用攝影機應用程式,此應用程式具有全域錄影存取權和全域觸發事件存取權
  • recording_module IRecordingModule 實作項目的 ComponentName
  • streaming_module IRecordingModule 實作項目的 ComponentName
  • trigger_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 感應器的 ID

  • description 使用者介面中顯示的觸發條件說明

  • recordingLengthMs 事件後的錄影時間長度 (以毫秒為單位)。

  • sensorType 感應器類型。選項為 VHALSENSOR_MANAGER

  • sensorValueType 感應器產生的資料類型。選項包括 INTINT_ARRAYFLOATFLOAT_ARRAYBOOLEAN, STRING

  • thresholdType 如何評估感應器值。選項包括 AVERAGEBOOLEANEQUALSLEAPLEAP_AVERAGELEAP_OVERPEAKPEAK_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 Service 包含三個模組:

  • Stream 包含處理相機串流的邏輯。

  • Recording 包含處理錄音檔的邏輯。

  • Trigger 包含根據感應器資料觸發錄影的邏輯。模組 API 會在對應的介面 (IStreamModuleIRecorderModuleITriggerModule) 中定義,並透過 DashcamServiceAPI 公開給 DashcamManager

重疊模組

Dashcam Service 會使用 dashcam-service/res/values/config.xml 判斷模組實作項目的位置。我們為每個模組提供預設實作項目。不過,您可以透過在對應的設定值中設定元件,為每個模組疊加。

  • IRecorderModule 的 OEM 實作元件名稱設為 recording_module

  • IStreamModule 的 OEM 實作元件名稱設為串流模組。

  • ITriggerModule 的 OEM 實作元件名稱設為 trigger_module

    在執行階段,Dashcam 服務會為每個模組將 config.xml 中設定的元件名稱例項化。

應用程式開發人員指南

Dashcam 是可投入正式環境自訂的車輛行車記錄器解決方案。行車記錄器會使用 Dashcam Manager API 與 Dashcam service 通訊。如要查看 Dashcam Manager API,請前往 IDashcamManager只要具備必要權限,任何應用程式都可以使用 Dashcam Manager。

權限

支援 Camera2 和 EVS。

已預先建構

如要授予這些權限,最簡單的方法是使用 Blueprint 或 Make,將這些權限納入預先建構的設定中。

重疊式 UI

您可以使用執行階段資源覆蓋來自訂應用程式。詳情請參閱「執行階段資源重疊」。如要查看可疊加元素的清單,請參閱 overlayable.xml

延長觸發條件

您可以呼叫 DashcamManager.addTrigger(),為目前的工作階段延長觸發事件。新增的觸發條件只會在目前的工作階段持續存在。

自動啟動

不支援自動錄影功能。不過,您可以透過呼叫 DashcamManager.startRecording() 來啟動手動觸發事件 onBoot

最佳做法

  • 儲存空間。強烈建議使用外部可移除式儲存空間。

  • 使用者體驗。設計 Dashcam 應用程式的使用者介面,讓使用者能輕鬆操作,並遵循 AAOS 設計指南。

  • 效能最佳化。最佳化應用程式效能,盡可能減少資源用量,並確保在 AAOS 中順暢運作。

疑難排解

  • 攝影機連線問題AAOS IVI 必須支援 EVS 或 Camera2,且可供使用。

  • 儲存空間錯誤:確認可用儲存空間並管理錄影。我們強烈建議使用外部儲存空間,因為使用內部儲存空間可能會提早導致儲存空間耗損。