ドライブ レコーダーを統合する

ドライブ レコーダー アプリは AAOS と統合するように設計されており、ドライバーに動画録画機能を提供して安全性とセキュリティを強化します。このガイドでは、実装を成功させるための技術的な要件、統合手順、ベスト プラクティスについて説明します。

前提条件

続行する前に、次の前提条件を満たしていることを確認してください。

SDK:

  • SDK 31 以降が必要です。

ハードウェア:

  • AAOS で利用可能な EVS カメラまたは Camera2 カメラ。
  • 動画を録画するには、十分な内部ストレージ容量または取り外し可能な外部ストレージのサポートが必要です。

ソフトウェアの要件:

  • バンドルされていないサポート。詳細については、バンドルされていないアプリをご覧ください。
  • 権限。ドライブ レコーダーにはシステム権限が必要です。

ソースコードを取得する

ソースコードは、Android ソースコード検索で次の場所にあります。

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

ソースコードは次の 3 つのモジュールで提供されています。

  • Dashcam Service。ストリーミング、録音、トリガーのロジック。
  • Dashcam Manager:ダッシュカム サービスに接続し、安定した 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/ にあります

Gradle で Dashcam をビルドする詳細な手順は、README ファイルに記載されています。

権限

ダッシュカム サービスとダッシュカム アプリには、いくつかのシステム権限が必要です。

これらの権限を付与する最も簡単な方法は、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">
      <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 録音を保存するディレクトリ名。デフォルトは dashcam です。
  • max_storage_mb ドライブレコーダーに使用を許可するストレージ容量
  • max_age_days ファイルの削除までの保持期間
  • boot_startup_enabled デバイスの起動時に Dashcam サービスが開始される
  • 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

このファイルには、録画トリガーの構成が含まれています。トリガー構成は次の 2 つの部分で構成されます。

  • プレロール ID: カメラの ID(サポートされているものに応じて EVS または Camera2)。

  • prerollLengthMs 各イベントとともに保存されるプレロールの長さ。

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

この例では、カメラ ID 0 に 10 秒間のプレロールがあります。

  • name 一意のトリガー名

  • camera カメラの ID(サポートされているものに応じて EVS または Camera2)

  • sensorPropertyID センサーの ID

  • description UI に表示されるトリガーの説明

  • recordingLengthMs イベントの発生後に記録する時間(ミリ秒単位)。

  • sensorType センサーの種類。VHAL または SENSOR_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 で設定されます。

モジュール

ダッシュカム サービスは、次の 3 つのモジュールで構成されています。

  • Stream には、カメラからのストリームを処理するロジックが含まれています。

  • Recording には、録音を処理するロジックが含まれています。

  • トリガーには、センサーデータから録画をトリガーするロジックが含まれています。モジュール API は、対応するインターフェース(IStreamModuleIRecorderModuleITriggerModule)で定義され、DashcamServiceAPI を介して DashcamManager に公開されます。

オーバーレイ モジュール

Dashcam Service は dashcam-service/res/values/config.xml を使用して、モジュール実装の場所を特定します。各モジュールのデフォルト実装が用意されています。ただし、各モジュールは、対応する構成値にコンポーネントを設定することでオーバーレイできます。

  • OEM 実装コンポーネント名 IRecorderModulerecording_module に設定

  • ストリーミング モジュールに OEM 実装コンポーネント名 IStreamModule を設定します。

  • OEM 実装コンポーネント名 ITriggerModuletrigger_module に設定

    実行時に、Dashcam サービスは各モジュールの config.xml で設定されたコンポーネント名をインスタンス化します。

アプリ デベロッパー ガイド

Dashcam は、本番環境に対応したカスタマイズ可能なドライブレコーダー ソリューションです。ダッシュカムは、Dashcam Manager API を使用して Dashcam service と通信します。Dashcam Manager API は IDashcamManager にあります。必要な権限を持つアプリはすべて、ダッシュカム マネージャーを使用できます。

権限

Camera2 と EVS がサポートされています。

事前構築済み

これらの権限を付与する最も簡単な方法は、Blueprint または Make を使用して、事前構築済みの設定に権限を含めることです。

OverlayUI

アプリはランタイム リソース オーバーレイでカスタマイズできます。詳細については、ランタイム リソース オーバーレイをご覧ください。オーバーレイ可能な要素のリストについては、overlayable.xml をご覧ください。

トリガーを拡張する

トリガーは、DashcamManager.addTrigger() を呼び出すことで現在のセッションに延長できます。追加されたトリガーは、現在のセッションでのみ保持されます。

自動スタート

録画の自動開始はサポートされていません。ただし、手動トリガーは DashcamManager.startRecording() の呼び出しで開始できます。onBoot

おすすめの方法

  • ストレージ: 外部取り外し式ストレージを使用することを強くおすすめします。

  • ユーザー エクスペリエンス。AAOS デザイン ガイドラインに沿って、直感的でユーザー フレンドリーなドライブ レコーダー アプリの UI を設計します。

  • パフォーマンスの最適化。アプリのパフォーマンスを最適化して、リソース使用量を最小限に抑え、AAOS でスムーズに動作するようにします。

トラブルシューティング

  • カメラの接続に関する問題EVS または Camera2 がサポートされており、AAOS IVI で利用可能である必要があります。

  • ストレージ エラー。空き容量を確認して録画を管理します。内部ストレージを使用するとストレージが早期に摩耗する可能性があるため、外部ストレージを使用することを強くおすすめします。