แอป Dashcam ออกแบบมาเพื่อผสานรวมกับ AAOS เพื่อให้ผู้ขับขี่ สามารถบันทึกวิดีโอเพื่อเพิ่มความปลอดภัย คู่มือนี้ อธิบายข้อกำหนดทางเทคนิค ขั้นตอนการผสานรวม และแนวทางปฏิบัติแนะนำเพื่อ ให้การติดตั้งใช้งานประสบความสำเร็จ
สิ่งที่ต้องมีก่อน
ก่อนดำเนินการต่อ โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นต่อไปนี้
SDK:
- ต้องใช้ SDK 31 ขึ้นไป
ฮาร์ดแวร์:
- กล้อง EVS หรือ Camera2 ที่พร้อมใช้งานใน AAOS
- ต้องมีพื้นที่เก็บข้อมูลภายในเพียงพอหรือรองรับที่เก็บข้อมูลภายนอกแบบถอดออกได้
สำหรับการบันทึกวิดีโอ
ข้อกำหนดของซอฟต์แวร์
- การสนับสนุนแบบแยกส่วน ดูข้อมูลเพิ่มเติมได้ที่แอปที่ไม่ได้รวมกลุ่ม
- สิทธิ์ กล้องหน้ารถต้องใช้สิทธิ์ของระบบ
รับซอร์สโค้ด
กล้องหน้ารถเป็นส่วนหนึ่งของแอปที่ไม่ได้รวมไว้ใน AAOS หากต้องการดูโค้ดที่ไม่ได้รวมไว้ ให้ไปที่ดูโค้ด
เรียกดูซอร์สโค้ดด้วย Android Code Search
ซอร์สโค้ดมีอยู่ใน 3 โมดูลต่อไปนี้
- บริการกล้องหน้ารถ ตรรกะการสตรีม การบันทึก และการทริกเกอร์
- ตัวจัดการกล้องหน้ารถ เชื่อมต่อกับบริการกล้องติดรถยนต์และแสดง API ที่เสถียร ต่อไคลเอ็นต์
- แอป Dashcam อ้างอิงแอปพลิเคชัน Dashcam โดยใช้ Dashcam Manager API
สร้าง Dashcam
ใช้ Soong หรือ Gradle เพื่อสร้าง Dashcam
Soong
เกี่ยวกับ Soong
mma DashcamService DashcamManager-lib DashcamApp
APK อยู่ใน out/target/product/[lunch-target]/system/priv-app/
Gradle
ใน Gradle ให้ทำดังนี้
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
APK อยู่ใน out/aaos-apps-gradle-build/
ดูวิธีการโดยละเอียดในการสร้าง Dashcam ด้วย Gradle ได้ในไฟล์
README
สิทธิ์
บริการกล้องหน้ารถและแอปกล้องหน้ารถต้องได้รับสิทธิ์ของระบบหลายอย่าง
วิธีที่ตรงไปตรงมาที่สุดในการให้สิทธิ์เหล่านี้คือการรวมสิทธิ์ไว้ในการตั้งค่าที่สร้างไว้ล่วงหน้าโดยใช้ Blueprint หรือ Make
ใน 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,
}
ใน 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 \
สร้างไฟล์สิทธิ์ชื่อ 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>
เพิ่มสิทธิ์จากไฟล์ Manifest ไปยังไฟล์สิทธิ์
ก่อนใช้กล้องหน้ารถ ให้ให้สิทธิ์ Camera2 แก่บริการกล้องหน้ารถล่วงหน้าตามที่แสดงใน AAOS Camera
เพิ่มไฟล์สิทธิ์ที่ให้ไว้ล่วงหน้าลงในไฟล์ Blueprint หรือ Make ในลักษณะเดียวกับไฟล์สิทธิ์
ใน 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>
ใน 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,
}
ดูข้อมูลเพิ่มเติมได้ที่ผสานรวมการสร้างล่วงหน้าเข้ากับอิมเมจระบบและเพิ่มรายการที่อนุญาต
ไซด์โหลด
นอกจากนี้ยังโหลดไฟล์สิทธิ์จากภายนอกได้ด้วย ใช้วิธีนี้เมื่อไม่ได้กำหนดค่า Dashcam ที่สร้างไว้ล่วงหน้า
ใช้ไฟล์สิทธิ์ที่สร้างไว้ในส่วน Prebuilts ก่อนหน้านี้ แล้วเรียกใช้คำสั่งต่อไปนี้
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
เพิ่มไฟล์สิทธิ์ที่ได้รับล่วงหน้าในลักษณะเดียวกับ etc/default-permissions/
กำหนดค่าการซ้อนทับ
บริการกล้องติดรถยนต์มีการกำหนดค่าที่ซ้อนทับได้
การกำหนดค่าบริการ
dashcam-service/res/values/config.xml
ไฟล์นี้มีการกำหนดค่าสำหรับบริการดังนี้
config_fileชื่อของไฟล์การกำหนดค่าทริกเกอร์ใน/assetsallow_internal_storageอนุญาตให้บันทึกเสียงไปยังที่จัดเก็บข้อมูลภายในboot_startup_enabledบริการกล้องหน้ารถจะเริ่มทำงานเมื่อเปิดเครื่องอุปกรณ์notifications_onแสดงการแจ้งเตือนเมื่อเริ่มการบันทึกdefault_app_componentแอปกล้องติดรถยนต์เริ่มต้นซึ่งมีสิทธิ์เข้าถึงการบันทึกและทริกเกอร์ทั่วโลกrecording_moduleComponentName ของการติดตั้งใช้งานIRecordingModulestreaming_moduleComponentName ของการติดตั้งใช้งานIStreamingModuletrigger_moduleComponentName ของการติดตั้งใช้งานITriggerModule
การกำหนดค่าทริกเกอร์
หากต้องการกำหนดค่าทริกเกอร์การบันทึก ให้ทำสำเนาของรายการต่อไปนี้
dashcam-service/src/assets/config.xml
และเพิ่มลงในไดเรกทอรีชิ้นงาน ชี้ไปยังไฟล์นี้ในองค์ประกอบ config_file
ในไฟล์การกำหนดค่าบริการ
การกำหนดค่าทริกเกอร์ประกอบด้วยส่วนพื้นที่เก็บข้อมูล กล้อง และทริกเกอร์ ดังนี้
พื้นที่เก็บข้อมูล
การกำหนดค่าพื้นที่เก็บข้อมูลมีองค์ประกอบต่อไปนี้
maxStorageUsagePercentเปอร์เซ็นต์สูงสุดของพื้นที่เก็บข้อมูลที่พร้อมใช้งานซึ่งกล้องติดรถยนต์ใช้ก่อนที่จะลบการบันทึกmaxStorageUsageMegabytesจำนวนพื้นที่เก็บข้อมูลสูงสุดในหน่วยเมกะไบต์ที่กล้องติดรถยนต์ใช้ก่อนที่จะลบการบันทึกmaxAgeHoursBeforePruneจำนวนชั่วโมงสูงสุดก่อนที่ระบบจะลบการบันทึก ระบบอาจลบไฟล์บันทึกก่อนกำหนดหากใช้พื้นที่เก็บข้อมูลถึงขีดจำกัด
กล้อง
การกำหนดค่ากล้องมีองค์ประกอบต่อไปนี้
รหัสกล้อง รหัสของกล้องที่มีคำนำหน้าของกล้อง
prerollLengthMsความยาวของโฆษณาตอนต้นที่จะจัดเก็บไว้กับแต่ละเหตุการณ์widthความกว้างของบัฟเฟอร์ที่กล้องส่งคืน (ไม่บังคับ)heightความสูงของบัฟเฟอร์ที่กล้องส่งคืน (ไม่บังคับ)
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
ตัวอย่างนี้แสดงรหัสกล้อง EVS:1 ที่มีโฆษณาคั่นก่อนยาว 10 วินาทีที่ความละเอียด 1080p และ รหัสกล้อง Camera2:1 ที่มีโฆษณาคั่นก่อนยาว 10 วินาที รวมถึงความกว้างและความสูงเริ่มต้น
ทริกเกอร์
การกำหนดค่าทริกเกอร์ประกอบด้วยรายการทริกเกอร์ที่กำหนดโดยข้อมูลต่อไปนี้
nameชื่อทริกเกอร์ที่ไม่ซ้ำกันcamerasรหัสของกล้องsensorPropertyIDรหัสของเซ็นเซอร์ที่นำหน้าด้วยกลุ่มเซ็นเซอร์ ตัวเลือกคำนำหน้าคือVHALหรือSENSOR_MANAGERdescriptionคำอธิบายของทริกเกอร์ที่แสดงใน UIrecordingLengthMsระยะเวลาหลังเหตุการณ์ที่จะบันทึกเป็นมิลลิวินาทีsensorValueTypeประเภทข้อมูลที่เซ็นเซอร์สร้างขึ้น ตัวเลือกคือINT,INT_ARRAY,FLOAT,FLOAT_ARRAYและBOOLEAN, STRINGthresholdTypeวิธีประเมินค่าเซ็นเซอร์เทียบกับthresholdValueตัวเลือก ได้แก่AVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKและPEAK_HOLDthresholdValueค่าที่เปรียบเทียบกับค่าเซ็นเซอร์thresholdExtraต้องระบุค่าเพิ่มเติมสำหรับเกณฑ์บางประเภท เช่น ช่วง สำหรับAVERAGEtriggerCooldownระยะเวลาพักเป็นมิลลิวินาทีก่อนที่จะทริกเกอร์เหตุการณ์ประเภทนี้อีก
<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>
ตัวอย่างนี้แสดงทริกเกอร์ที่ TriggerModule ตรวจสอบเซ็นเซอร์ VHAL ที่สร้างค่าจำนวนเต็ม
TriggerModule เปรียบเทียบความเท่าเทียมกับค่าเกณฑ์ เมื่อตรงตามเงื่อนไขความเท่ากัน ทริกเกอร์
จะบันทึกในกล้อง EVS 1 และ 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"/>
ตัวอย่างนี้แสดงทริกเกอร์ที่ TriggerModule ตรวจสอบเซ็นเซอร์ VHAL ที่สร้างค่าลอย
TriggerModule เปรียบเทียบค่าเฉลี่ยของเซ็นเซอร์ในช่วงตัวอย่าง 10 กับค่าเกณฑ์ 20.0
ตั้งค่าช่วงตัวอย่างใน thresholdExtra ระบบจะทริกเกอร์เหตุการณ์ใหม่ได้ทุกๆ
2000 มิลลิวินาทีตามที่ตั้งค่าไว้ใน triggerCooldown
โมดูล
บริการ Dashcam ประกอบด้วย 3 โมดูล ได้แก่
สตรีมมีตรรกะสำหรับการจัดการสตรีมจากกล้อง
การบันทึกมีตรรกะสำหรับการจัดการการบันทึก
ทริกเกอร์มีตรรกะสำหรับการทริกเกอร์การบันทึกจากข้อมูลเซ็นเซอร์ API ของโมดูลได้รับการกำหนดไว้ในอินเทอร์เฟซที่เกี่ยวข้อง
IStreamModule,IRecorderModuleและITriggerModuleและแสดงต่อDashcamManagerผ่านDashcamServiceAPI
โมดูลการวางซ้อน
บริการ Dashcam ใช้ dashcam-service/res/values/config.xml เพื่อระบุตำแหน่ง
ที่จะค้นหาการติดตั้งใช้งานโมดูล การติดตั้งใช้งานเริ่มต้นมีให้สำหรับแต่ละ
โมดูล อย่างไรก็ตาม คุณสามารถซ้อนทับแต่ละโมดูลได้โดยการตั้งค่าคอมโพเนนต์ใน
ค่าการกำหนดค่าที่เกี่ยวข้อง
ตั้งชื่อคอมโพเนนต์การติดตั้งใช้งาน OEM ของ
IRecorderModuleถึงrecording_moduleIStreamModuleถึงstreaming_moduleITriggerModuleถึงtrigger_module
ในขณะรันไทม์ บริการกล้องติดรถยนต์จะสร้างอินสแตนซ์ของชื่อคอมโพเนนต์ที่ตั้งค่าไว้ใน config.xml สำหรับแต่ละโมดูล
คู่มือสำหรับนักพัฒนาแอป
Dashcam เป็นโซลูชันกล้องติดรถยนต์ที่พร้อมใช้งานจริงและปรับแต่งได้ Dashcam
ใช้ Dashcam Manager API เพื่อสื่อสารกับ Dashcam service คุณดู Dashcam
Manager API ได้ที่ IDashcamManager แอปใดก็ตามที่มีสิทธิ์ที่จำเป็นจะใช้ Dashcam Manager ได้
OverlayUI
แอปสามารถปรับแต่งได้ด้วยการซ้อนทับทรัพยากรที่รันไทม์ ดูข้อมูลเพิ่มเติมได้ที่การซ้อนทับทรัพยากรที่รันไทม์ หากต้องการดูรายการองค์ประกอบที่วางซ้อนได้ ให้ดู overlayable.xml
ขยายทริกเกอร์
คุณขยายเวลาทริกเกอร์สำหรับเซสชันปัจจุบันได้ด้วยการโทร
ไปที่ DashcamManager#addTrigger() ทริกเกอร์ที่เพิ่มจะคงอยู่สำหรับเซสชันปัจจุบันเท่านั้น
การเริ่มต้นอัตโนมัติ
ระบบไม่รองรับการบันทึกอัตโนมัติ อย่างไรก็ตาม คุณสามารถเริ่มทริกเกอร์ด้วยตนเองได้
โดยการเรียกใช้ onBoot ด้วยการเรียกใช้ DashcamManager.startRecording()
แนวทางปฏิบัติแนะนำ
พื้นที่เก็บข้อมูล ขอแนะนำให้ใช้ที่เก็บข้อมูลภายนอกแบบถอดออกได้
ประสบการณ์ของผู้ใช้ ออกแบบ UI ของแอป Dashcam ให้ใช้งานง่ายและ เป็นมิตรกับผู้ใช้ โดยปฏิบัติตามหลักเกณฑ์การออกแบบ AAOS
การเพิ่มประสิทธิภาพ เพิ่มประสิทธิภาพของแอปเพื่อลดการใช้ทรัพยากรและรับประกันการทำงานที่ราบรื่นใน AAOS
การแก้ปัญหา
ปัญหาเกี่ยวกับการเชื่อมต่อกล้อง ต้องรองรับ EVS หรือ Camera2 และพร้อมใช้งานใน IVI ของ AAOS
ข้อผิดพลาดเกี่ยวกับพื้นที่เก็บข้อมูล ตรวจสอบพื้นที่เก็บข้อมูลที่พร้อมใช้งานและจัดการการบันทึก ขอแนะนำอย่างยิ่งให้ใช้ที่จัดเก็บข้อมูลภายนอก เนื่องจากการใช้ที่จัดเก็บข้อมูลภายในอาจทำให้ที่จัดเก็บข้อมูลเสื่อมสภาพก่อนเวลาอันควร