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
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_fileNama file konfigurasi pemicu di/assetsallow_internal_storageIzinkan rekaman disimpan ke penyimpanan internalboot_startup_enabledMulai layanan Dashcam saat perangkat di-bootnotifications_onTampilkan notifikasi saat perekaman dimulaidefault_app_componentAplikasi kamera dasbor default, yang memiliki akses rekaman global dan akses pemicu global- Implementasi
recording_moduleComponentNameIRecordingModule - Implementasi
streaming_moduleComponentNameIStreamingModule - Implementasi
trigger_moduleComponentNameITriggerModule
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:
maxStorageUsagePercentPersentase maksimum penyimpanan yang tersedia yang digunakan dashcam sebelum memangkas rekaman.maxStorageUsageMegabytesJumlah maksimum penyimpanan dalam megabyte yang digunakan kamera dasbor sebelum memangkas rekaman.maxAgeHoursBeforePruneJumlah 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.
prerollLengthMsDurasi preroll yang disimpan dengan setiap peristiwa.widthLebar opsional buffer yang ditampilkan oleh kamera.heightTinggi 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:
nameNama pemicu unik.camerasID kamera.ID
sensorPropertyIDsensor 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. Opsinya adalahAVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAK, danPEAK_HOLD.thresholdValueNilai yang dibandingkan dengan nilai sensor.thresholdExtraNilai tambahan diperlukan untuk beberapa jenis batas seperti rentang untukAVERAGE.triggerCooldownWaktu 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, danITriggerModuleserta diekspos keDashcamManagermelaluiDashcamServiceAPI.
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:
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 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.