Mengintegrasikan Dashcam

Aplikasi Dashcam didesain untuk terintegrasi dengan AAOS, sehingga pengemudi dapat merekam video untuk meningkatkan keselamatan dan keamanan. Panduan ini menguraikan persyaratan teknis, langkah-langkah integrasi, dan praktik terbaik untuk memastikan keberhasilan penerapan.

Prasyarat

Sebelum Anda melanjutkan, pastikan prasyarat berikut terpenuhi:

SDK:

  • Memerlukan SDK 31 atau yang lebih tinggi.

Hardware:

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

Persyaratan software:

  • Dukungan yang tidak digabungkan. Untuk mempelajari lebih lanjut, lihat Aplikasi Tidak Tergabung.
  • Izin. Dashcam memerlukan izin sistem.

Mendapatkan kode sumber

Dashcam adalah bagian dari aplikasi AAOS yang tidak tergabung. Untuk memeriksa kode yang tidak digabungkan, lihat Memeriksa kode.

Telusuri kode sumber dengan Penelusuran Kode Android.

Kode sumber disediakan dalam tiga modul ini:

  • Layanan Dashcam. Logika streaming, perekaman, dan pemicuan.
  • Pengelola Dashcam. Terhubung ke Layanan Dashcam dan mengekspos API yang stabil ke klien
  • Aplikasi Dashcam. Merujuk aplikasi Dashcam menggunakan Dashcam Manager API

Diagram arsitektur

Membangun Dashcam

Gunakan Soong atau Gradle untuk mem-build Dashcam.

Soong

On 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 membangun 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 terlebih dahulu ke Layanan Dashcam seperti yang ditunjukkan di AAOS Camera.

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 build awal ke dalam image sistem dan Menambahkan daftar yang diizinkan.

Sideload

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

Dengan menggunakan file izin yang dibuat di bagian prebuilt 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 yang diberikan dengan cara yang sama seperti etc/default-permissions/.

Mengonfigurasi overlay

Layanan Dashcam memiliki konfigurasi yang dapat ditimpa.

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 Izinkan rekaman disimpan ke penyimpanan internal
  • boot_startup_enabled Mulai layanan Dashcam saat perangkat di-boot
  • notifications_on Tampilkan notifikasi saat perekaman dimulai
  • default_app_component Aplikasi kamera dasbor default, yang memiliki akses rekaman global dan akses pemicu global
  • Implementasi recording_module ComponentName IRecordingModule
  • Implementasi streaming_module ComponentName IStreamingModule
  • Implementasi trigger_module ComponentName ITriggerModule

Konfigurasi pemicu

Untuk mengonfigurasi pemicu perekaman, buat salinan:

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 maksimum penyimpanan dalam megabyte yang digunakan kamera dasbor sebelum memangkas rekaman.

  • maxAgeHoursBeforePrune Jumlah maksimum jam sebelum rekaman dipangkas. Perekaman dapat dipangkas lebih awal jika batas penyimpanan tercapai.

Kamera

Konfigurasi kamera memiliki elemen berikut:

  • ID Kamera. ID kamera dengan awalan kamera.

  • prerollLengthMs Durasi preroll yang disimpan dengan setiap peristiwa.

  • width Lebar opsional buffer yang ditampilkan oleh kamera.

  • height Tinggi opsional buffer 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.

Trigger

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

  • name Nama pemicu unik.

  • cameras ID kamera.

  • ID sensorPropertyID 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. Opsinya adalah AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK, dan PEAK_HOLD.

  • thresholdValue Nilai yang dibandingkan dengan nilai sensor.

  • thresholdExtra Nilai tambahan diperlukan untuk beberapa jenis batas seperti rentang untuk AVERAGE.

  • triggerCooldown Waktu 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 yang memantau sensor VHAL yang menghasilkan nilai bilangan bulat.TriggerModule TriggerModule membandingkan kesetaraan dengan nilai minimum. Jika kondisi kesetaraan 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 yang memantau sensor VHAL yang menghasilkan nilai float.TriggerModule TriggerModule membandingkan rata-rata sensor selama rentang 10 sampel 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

Dashcam Service menggunakan dashcam-service/res/values/config.xml untuk menentukan tempat menemukan implementasi modul. Implementasi default disediakan untuk setiap modul. Namun, setiap modul dapat ditimpa dengan menyetel komponennya dalam nilai konfigurasi yang sesuai.

Tetapkan nama komponen implementasi OEM:

  • 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 siap produksi dan 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 di-overlay, 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 mulai 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. Mengoptimalkan 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 IVI AAOS.

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