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_fileNama file konfigurasi pemicu di/assetsallow_internal_storageMengizinkan rekaman disimpan ke penyimpanan internalboot_startup_enabledLayanan dashcam dimulai saat perangkat melakukan bootingnotifications_onMenampilkan notifikasi saat perekaman dimulaidefault_app_componentAplikasi dashcam default, yang memiliki akses rekaman global dan akses pemicu globalrecording_moduleComponentName dari penerapanIRecordingModulestreaming_moduleComponentName dari implementasiIStreamingModuletrigger_moduleComponentName 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:
maxStorageUsagePercentPersentase maksimum penyimpanan yang tersedia yang digunakan dashcam sebelum memangkas rekaman.maxStorageUsageMegabytesJumlah penyimpanan maksimum dalam megabyte yang digunakan dashcam sebelum memangkas rekaman.maxAgeHoursBeforePruneJumlah 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.
prerollLengthMsDurasi preroll yang akan disimpan dengan setiap peristiwa.widthLebar buffer opsional yang ditampilkan oleh kamera.heightTinggi 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:
nameNama pemicu yang unik.camerasID kamera.sensorPropertyIDID sensor yang diawali dengan grup sensor. Opsi awalan adalahVHALatauSENSOR_MANAGER.descriptionDeskripsi pemicu yang ditampilkan di UI.recordingLengthMsDurasi setelah peristiwa yang akan direkam dalam milidetik.sensorValueTypeJenis data yang dihasilkan oleh sensor. Opsinya adalahINT,INT_ARRAY,FLOAT,FLOAT_ARRAY, danBOOLEAN, STRING.thresholdTypeCara mengevaluasi nilai sensor terhadapthresholdValue. Opsi adalahAVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAK, danPEAK_HOLD.thresholdValueNilai yang dibandingkan dengan nilai sensor.thresholdExtraNilai tambahan yang diperlukan untuk beberapa jenis nilai minimum seperti rentang untukAVERAGE.triggerCooldownPeriode 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 keDashcamManagermelaluiDashcamServiceAPI.
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:
IRecorderModulehinggarecording_moduleIStreamModulehinggastreaming_moduleITriggerModulehinggatrigger_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.