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:
- Dukungan yang tidak dipaketkan. Untuk mempelajari lebih lanjut, lihat Aplikasi yang Tidak Dipaketkan.
- Izin. Dashcam memerlukan izin sistem.
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
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 internalboot_startup_enabled
Layanan Dashcam dimulai saat perangkat melakukan bootingnotifications_on
Menampilkan notifikasi saat perekaman dimulaidefault_app_component
Aplikasi dashcam default, yang memiliki akses rekaman global dan akses pemicu globalrecording_module
ComponentName dari penerapanIRecordingModule
streaming_module
ComponentName dari implementasiIStreamingModule
trigger_module
ComponentName dari penerapanITriggerModule
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 adalahVHAL
atauSENSOR_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 adalahINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
, danBOOLEAN, STRING
.thresholdType
Cara mengevaluasi nilai sensor terhadapthresholdValue
. Opsi adalahAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
, danPEAK_HOLD
.thresholdValue
Nilai yang dibandingkan dengan nilai sensor.thresholdExtra
Nilai tambahan yang diperlukan untuk beberapa jenis nilai minimum seperti rentang untukAVERAGE
.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
, danITriggerModule
, serta diekspos keDashcamManager
melaluiDashcamServiceAPI
.
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
hinggarecording_module
IStreamModule
hinggastreaming_module
ITriggerModule
hinggatrigger_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.