ドライブ レコーダー アプリは AAOS と統合するように設計されており、ドライバーに動画録画機能を提供して安全性とセキュリティを強化します。このガイドでは、実装を成功させるための技術的な要件、統合手順、ベスト プラクティスについて説明します。
前提条件
続行する前に、次の前提条件を満たしていることを確認してください。
SDK:
- SDK 31 以降が必要です。
ハードウェア:
- AAOS で利用可能な EVS カメラまたは Camera2 カメラ。
- 動画を録画するには、十分な内部ストレージ容量または取り外し可能な外部ストレージのサポートが必要です。
ソフトウェアの要件:
- バンドルされていないサポート。詳細については、バンドルされていないアプリをご覧ください。
- 権限。ドライブ レコーダーにはシステム権限が必要です。
ソースコードを取得する
ソースコードは、Android ソースコード検索で次の場所にあります。
ソースコードは次の 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 実装の ComponentNamestreaming_module
IRecordingModule 実装の ComponentNametrigger_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
センサーの 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
で設定されます。
モジュール
ダッシュカム サービスは、次の 3 つのモジュールで構成されています。
Stream には、カメラからのストリームを処理するロジックが含まれています。
Recording には、録音を処理するロジックが含まれています。
トリガーには、センサーデータから録画をトリガーするロジックが含まれています。モジュール API は、対応するインターフェース(
IStreamModule
、IRecorderModule
、ITriggerModule
)で定義され、DashcamServiceAPI
を介して DashcamManager に公開されます。
オーバーレイ モジュール
Dashcam Service は dashcam-service/res/values/config.xml
を使用して、モジュール実装の場所を特定します。各モジュールのデフォルト実装が用意されています。ただし、各モジュールは、対応する構成値にコンポーネントを設定することでオーバーレイできます。
OEM 実装コンポーネント名
IRecorderModule
をrecording_module
に設定ストリーミング モジュールに OEM 実装コンポーネント名
IStreamModule
を設定します。OEM 実装コンポーネント名
ITriggerModule
をtrigger_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 で利用可能である必要があります。
ストレージ エラー。空き容量を確認して録画を管理します。内部ストレージを使用するとストレージが早期に摩耗する可能性があるため、外部ストレージを使用することを強くおすすめします。