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

Dashcam adalah bagian dari aplikasi yang tidak dipaketkan AAOS. Untuk memeriksa kode yang di-unbundle, lihat Memeriksa kode.

Jelajahi kode sumber dengan Android Code Search.

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

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

prebuilt_etc {
    name: "allowed_privapp_com.android.car.dashcam",
    sub_dir: "default-permissions",
    src: "allowed_privapp_com.android.car.dashcam.xml",
    filename_from_src: true,
}

Di Make:

dashcam.mk
PRODUCT_PACKAGES += \
    DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/Dashcam/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.service">
      <permission name="" />
  </privapp-permissions>
  <privapp-permissions package="com.android.car.dashcam.app">
      <permission name="" />
  </privapp-permissions>
</permissions>

Tambahkan izin dari Manifes ke file izin.

Sebelum menggunakan Dashcam, berikan izin Camera2 ke Layanan Dashcam seperti yang ditunjukkan di Kamera AAOS.

Tambahkan file izin yang telah diberikan sebelumnya ke file Blueprint atau Make dengan cara yang sama seperti file izin.

Di pre-grant-permissions-com.android.car.dashcam.xml:

<exceptions>
    <exception package="com.android.car.dashcam.service">
        <permission name="android.permission.CAMERA" fixed="false" />
        <permission name="android.permission.SYSTEM_CAMERA" fixed="false" />
        <permission name="android.permission.CAMERA_HEADLESS_SYSTEM_USER" fixed="false" />
    </exception>
</exceptions>

Di Android.bp:

...
required["pre-grant-permissions-com.android.car.dashcaml"]
...

prebuilt_etc {
    name: "pre-grant-permissions-com.android.car.dashcaml",
    sub_dir: "default-permissions",
    src: "pre-grant-permissions-com.android.car.dashcam.xml",
    filename_from_src: true,
}

Untuk mempelajari lebih lanjut, lihat Mengintegrasikan prebuild ke dalam image sistem dan Menambahkan daftar yang diizinkan.

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

Tambahkan file izin pra-pemberian dengan cara yang serupa dengan etc/default-permissions/.

Mengonfigurasi overlay

Layanan dashcam memiliki konfigurasi yang dapat ditempatkan.

Konfigurasi layanan

dashcam-service/res/values/config.xml

File ini berisi konfigurasi untuk layanan:

  • config_file Nama file konfigurasi pemicu di /assets
  • allow_internal_storage Mengizinkan rekaman disimpan ke penyimpanan internal
  • boot_startup_enabled Layanan Dashcam dimulai saat perangkat melakukan booting
  • notifications_on Menampilkan notifikasi saat perekaman dimulai
  • default_app_component Aplikasi dashcam default, yang memiliki akses rekaman global dan akses pemicu global
  • recording_module ComponentName dari penerapan IRecordingModule
  • streaming_module ComponentName dari implementasi IStreamingModule
  • trigger_module ComponentName dari penerapan ITriggerModule

Konfigurasi pemicu

Untuk mengonfigurasi pemicu perekaman, buat salinan dari:

dashcam-service/src/assets/config.xml

dan tambahkan ini ke direktori aset. Arahkan ke file ini di elemen config_file dalam file konfigurasi layanan.

Konfigurasi pemicu terdiri dari bagian penyimpanan, kamera, dan pemicu:

Penyimpanan

Konfigurasi penyimpanan memiliki elemen berikut:

  • maxStorageUsagePercent Persentase maksimum penyimpanan yang tersedia yang digunakan dashcam sebelum memangkas rekaman.

  • maxStorageUsageMegabytes Jumlah penyimpanan maksimum dalam megabyte yang digunakan dashcam sebelum memangkas rekaman.

  • maxAgeHoursBeforePrune Jumlah maksimum jam sebelum rekaman dipangkas. Rekaman dapat dipangkas lebih awal jika batas penyimpanan terpenuhi.

Kamera

Konfigurasi kamera memiliki elemen berikut:

  • ID Kamera. ID kamera dengan awalan kamera.

  • prerollLengthMs Durasi preroll yang akan disimpan dengan setiap peristiwa.

  • width Lebar buffer opsional yang ditampilkan oleh kamera.

  • height Tinggi buffer opsional yang ditampilkan oleh kamera.

<CameraConfig>
  <Camera
      ID="EVS:1"
      prerollLengthMs="10000"
      width="1920"
      height="1080" />
  <Camera
      ID="Camera2:1"
      prerollLengthMs="10000" />
</CameraConfig>

Contoh ini menunjukkan ID kamera EVS:1 dengan preroll 10 detik pada 1080p dan ID kamera Camera2:1 dengan preroll 10 detik serta lebar dan tinggi default.

Pemicu

Konfigurasi pemicu terdiri dari daftar pemicu yang ditentukan oleh hal berikut:

  • name Nama pemicu yang unik.

  • cameras ID kamera.

  • sensorPropertyID ID sensor yang diawali dengan grup sensor. Opsi awalan adalah VHAL atau SENSOR_MANAGER.

  • description Deskripsi pemicu yang ditampilkan di UI.

  • recordingLengthMs Durasi setelah peristiwa yang akan direkam dalam milidetik.

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

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

  • thresholdValue Nilai yang dibandingkan dengan nilai sensor.

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

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

<EventTriggers>
  <EventTrigger
      name="AEB"
      cameras="EVS:1, EVS:2"
      sensorPropertyID="VHAL:289411073"
      description="Automatic Emergency Braking"
      recordingLengthMs="20000"
      sensorValueType="INT"
      thresholdType="EQUALS"
      thresholdValue="2"
      triggerCooldown="5000"/>
</EventTriggers>

Contoh ini menunjukkan pemicu saat TriggerModule memantau sensor VHAL yang menghasilkan nilai bilangan bulat. TriggerModule membandingkan kesetaraan dengan nilai minimum. Jika kondisi kesamaan terpenuhi, pemicu akan merekam di kamera EVS 1 dan 2.

<EventTrigger
            name="SPEED"
            cameras="Camera2:0, Camera2:1,  Camera2:2,  Camera2:3"
            sensorPropertyID="VHAL:291504648"
            description="Over speed"
            recordingLengthMs="10000"
            sensorValueType="FLOAT"
            thresholdType="AVERAGE"
            thresholdValue="20.0"
            thresholdExtra="10"
            triggerCooldown="2000"/>

Contoh ini menunjukkan pemicu saat TriggerModule memantau sensor VHAL yang menghasilkan nilai float. TriggerModule membandingkan rata-rata sensor selama rentang sampel 10 dengan nilai minimum 20.0. Rentang sampel ditetapkan di thresholdExtra. Peristiwa baru hanya dapat dipicu setiap 2000 milidetik seperti yang ditetapkan di triggerCooldown.

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. Implementasi default disediakan untuk setiap modul. Namun, setiap modul dapat ditempatkan dengan menetapkan komponennya dalam nilai konfigurasi yang sesuai.

Tetapkan nama komponen implementasi OEM dari:

  • IRecorderModule hingga recording_module
  • IStreamModule hingga streaming_module
  • ITriggerModule hingga 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.

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