Mengintegrasikan Dashcam

Aplikasi Dashcam dirancang untuk berintegrasi dengan AAOS, yang memberi pengemudi kemampuan perekaman video untuk meningkatkan keselamatan dan keamanan. Panduan ini menguraikan persyaratan teknis, langkah-langkah integrasi, dan praktik terbaik untuk memastikan keberhasilan penerapan.

Prasyarat

Sebelum melanjutkan, pastikan prasyarat berikut terpenuhi:

SDK:

  • SDK 31 atau yang lebih tinggi diperlukan.

Hardware:

  • Kamera EVS atau Camera2 tersedia untuk AAOS.
  • Ruang penyimpanan internal yang memadai atau dukungan untuk penyimpanan eksternal yang dapat dilepas
    harus tersedia untuk perekaman video.

Persyaratan software:

Mendapatkan kode sumber

Temukan kode sumber di Penelusuran Kode Android di:

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

Kode sumber disediakan dalam tiga modul ini:

  • Layanan Dashcam. Logika streaming, perekaman, dan pemicu.
  • Dashcam Manager. Menghubungkan ke Layanan Dashcam dan mengekspos API yang stabil ke klien
  • Aplikasi Dashcam. Referensi aplikasi Dashcam menggunakan Dashcam Manager API

Diagram arsitektur

Mem-build Dashcam

Gunakan Soong atau Gradle untuk mem-build Dashcam.

Soong

Sebelum mem-build dari Soong, pastikan untuk membersihkan direktori .cxx.

Di Soong:

mma DashcamService DashcamManager-lib DashcamApp

APK terletak di out/target/product/[lunch-target]/system/priv-app/

Gradle

Di Gradle:

./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble

APK terletak di out/aaos-apps-gradle-build/

Petunjuk mendetail untuk mem-build Dashcam dengan Gradle disediakan dalam file README.

Izin

Beberapa izin sistem diperlukan untuk Layanan Dashcam dan Aplikasi Dashcam.

Cara paling mudah untuk memberikan izin ini adalah dengan menyertakannya dalam penyiapan bawaan menggunakan Blueprint atau Make.

Di Blueprint:

Android.bp
android_app_import {
    name: "DashcamApp-prebuilt",
    apk: "DashcamApp.apk",
    privileged: true,
    certificate: "platform",
    required: ["allowed_privapp_com.android.car.dashcam"],
}

Di 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 \

Buat file izin bernama 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>

Tambahkan izin dari Manifes ke file izin.

Untuk mempelajari lebih lanjut, lihat Di-build sebelumnya ke dalam image sistem.

Sideload

File izin juga dapat di-sideload. Gunakan metode ini jika Dashcam bawaan tidak dikonfigurasi.

Dengan menggunakan file izin yang dibuat di bagian bawaan sebelumnya, jalankan:

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

Mengonfigurasi overlay

Layanan dashcam memiliki konfigurasi yang dapat ditempatkan.

Konfigurasi layanan

dashcam-service/res/values/config.xml

File ini berisi konfigurasi untuk layanan:

  • allow_internal_storage Mengizinkan rekaman ke penyimpanan internal
  • save_location Nama direktori untuk menyimpan rekaman. Default-nya adalah dashcam
  • max_storage_mb Jumlah penyimpanan yang diizinkan untuk digunakan dashcam
  • max_age_days Durasi penyimpanan file sebelum pemangkasan
  • boot_startup_enabled Layanan dashcam dimulai saat perangkat melakukan booting
  • notifications_on Menampilkan notifikasi saat perekaman dimulai
  • native_recorder Menggunakan NDK API, defaultnya adalah Java API
  • native_renderer Menggunakan NDK API, defaultnya adalah Java API
  • default_app_component Aplikasi dashcam default, aplikasi ini memiliki akses rekaman global dan akses pemicu global
  • recording_module ComponentName dari penerapan IRecordingModule
  • streaming_module ComponentName dari penerapan IRecordingModule
  • trigger_module ComponentName dari penerapan IRecordingModule

Mengonfigurasi pemicu

Untuk memicu konfigurasi, jalankan:

dashcam-service/src/assets/config.xml

File ini berisi konfigurasi untuk merekam pemicu. Konfigurasi pemicu terdiri dari dua bagian:

  • ID pre-roll. ID kamera, baik EVS maupun Camera2, bergantung pada hal yang didukung.

  • prerollLengthMs Durasi pra-rol yang akan disimpan dengan setiap peristiwa.

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

Contoh ini menampilkan ID kamera 0 dengan pre-roll 10 detik.

  • name Nama pemicu yang unik

  • camera ID kamera, baik EVS maupun Camera2, bergantung pada yang didukung

  • sensorPropertyID ID sensor

  • description Deskripsi pemicu yang ditampilkan di UI

  • recordingLengthMs Durasi setelah peristiwa yang akan direkam dalam milidetik.

  • sensorType Jenis sensor. Opsi yang tersedia adalah VHAL atau SENSOR_MANAGER

  • sensorValueType Jenis data yang dihasilkan oleh sensor. Opsi adalah INT, INT_ARRAY, FLOAT, FLOAT_ARRAY, dan BOOLEAN, STRING

  • thresholdType Cara mengevaluasi nilai sensor. Opsi adalah AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK, dan PEAK_HOLD

  • thresholdValue Nilai yang akan dibandingkan dengan nilai sensor dengan jenis nilai minimum

  • thresholdExtra Nilai tambahan yang diperlukan untuk beberapa jenis nilai minimum seperti rentang untuk AVERAGE

  • triggerCooldown Pendinginan sebelum memicu peristiwa lain dari jenis ini dalam milidetik.

<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>

Contoh ini menunjukkan sensor VHAL yang menghasilkan nilai bilangan bulat tempat kita membandingkan kesetaraan dengan nilai nilai minimum. Saat kondisi kesamaan terpenuhi, pemicu akan merekam di kamera 1 dan 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"/>

Contoh ini menunjukkan sensor VHAL yang menghasilkan nilai float tempat kita mengevaluasi rata-rata dari berbagai sampel terhadap nilai nilai minimum. Rentang contoh ditetapkan di thresholdExtra

Modul

Layanan Dashcam terdiri dari tiga modul:

  • Stream berisi logika untuk menangani streaming dari kamera.

  • Recording berisi logika untuk menangani rekaman.

  • Pemicu berisi logika untuk memicu perekaman dari data sensor. API modul ditentukan dalam antarmuka yang sesuai, IStreamModule, IRecorderModule, dan ITriggerModule, serta diekspos ke DashcamManager melalui DashcamServiceAPI

Modul overlay

Layanan Dashcam menggunakan dashcam-service/res/values/config.xml untuk menentukan tempat menemukan implementasi modul. Kami menyediakan implementasi default untuk setiap modul. Namun, setiap modul dapat ditempatkan dengan menetapkan komponennya dalam nilai konfigurasi yang sesuai.

  • Tetapkan nama komponen penerapan OEM IRecorderModule ke recording_module

  • Tetapkan nama komponen penerapan OEM IStreamModule ke modul streaming.

  • Tetapkan nama komponen penerapan OEM ITriggerModule ke trigger_module

    Saat runtime, layanan Dashcam membuat instance nama komponen yang ditetapkan di config.xml untuk setiap modul.

Panduan developer aplikasi

Dashcam adalah solusi dashcam yang dan siap produksi serta dapat disesuaikan. Dashcam menggunakan Dashcam Manager API untuk berkomunikasi dengan Dashcam service. Dashcam Manager API dapat ditemukan di IDashcamManager. Aplikasi apa pun dengan izin yang diperlukan dapat menggunakan Pengelola Dashcam.

Izin

Camera2 dan EVS didukung.

Bawaan

Cara termudah untuk memberikan izin ini adalah dengan menyertakannya dalam penyiapan bawaan menggunakan Blueprint atau Make.

OverlayUI

Aplikasi dapat disesuaikan dengan Overlay Resource Runtime. Untuk mempelajari lebih lanjut, lihat Overlay Resource Runtime. Untuk melihat daftar elemen yang dapat ditempatkan, lihat overlayable.xml.

Memperluas pemicu

Pemicu dapat diperluas untuk sesi saat ini dengan panggilan ke DashcamManager.addTrigger(). Pemicu yang ditambahkan hanya bertahan untuk sesi saat ini.

Mulai otomatis

Perekaman otomatis tidak didukung. Namun, pemicu manual dapat dimulai onBoot dengan panggilan ke DashcamManager.startRecording()

Praktik terbaik

  • Penyimpanan. Penyimpanan eksternal yang dapat dilepas sangat direkomendasikan.

  • Pengalaman pengguna. Desain UI aplikasi Dashcam agar intuitif dan mudah digunakan, dengan mematuhi panduan desain AAOS.

  • Pengoptimalan performa. Optimalkan performa aplikasi untuk meminimalkan penggunaan resource dan memastikan pengoperasian yang lancar di AAOS.

Pemecahan masalah

  • Masalah Konektivitas Kamera. EVS atau Camera2 harus didukung dan tersedia di AAOS IVI.

  • Error penyimpanan. Memverifikasi ruang penyimpanan yang tersedia dan mengelola rekaman. Penyimpanan eksternal sangat direkomendasikan karena penggunaan penyimpanan internal dapat menyebabkan penyimpanan cepat rusak.