แอป Dashcam ออกแบบมาเพื่อผสานรวมกับ AAOS ซึ่งช่วยให้ผู้ขับขี่มีความสามารถในการบันทึกวิดีโอเพื่อความปลอดภัยยิ่งขึ้น คู่มือนี้จะอธิบายข้อกําหนดทางเทคนิค ขั้นตอนการผสานรวม และแนวทางปฏิบัติแนะนําเพื่อให้การติดตั้งใช้งานประสบความสําเร็จ
สิ่งที่ต้องมีก่อน
โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกําหนดเบื้องต้นต่อไปนี้ก่อนดําเนินการต่อ
SDK:
- ต้องใช้ SDK 31 ขึ้นไป
ฮาร์ดแวร์:
- กล้อง EVS หรือ Camera2 ที่พร้อมใช้งานใน AAOS
- ต้องมีพื้นที่เก็บข้อมูลภายในเพียงพอหรือรองรับที่จัดเก็บข้อมูลภายนอกแบบถอดได้
สำหรับการบันทึกวิดีโอ
ข้อกำหนดของซอฟต์แวร์
- การสนับสนุนแบบไม่ได้รวมกลุ่ม ดูข้อมูลเพิ่มเติมได้ที่แอปที่แยกออกมา
- สิทธิ์ กล้องหน้ารถต้องใช้สิทธิ์เข้าถึงระบบ
รับซอร์สโค้ด
ค้นหาซอร์สโค้ดในการค้นหาโค้ด Android ที่
ซอร์สโค้ดมีอยู่ในโมดูล 3 รายการต่อไปนี้
- บริการกล้องติดหน้ารถ ตรรกะการสตรีม การบันทึก และการทริกเกอร์
- ตัวจัดการกล้องติดรถยนต์ เชื่อมต่อกับบริการ Dashcam และแสดง API ที่เสถียรต่อไคลเอ็นต์
- แอป Dashcam อ้างอิงแอปพลิเคชัน Dashcam โดยใช้ Dashcam Manager API
สร้าง Dashcam
ใช้ Soong หรือ Gradle เพื่อสร้าง Dashcam
Soong
ก่อนสร้างจาก Soong โปรดล้างไดเรกทอรี .cxx
ใน 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
ในพิมพ์เขียว
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
ใน "สร้าง"
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/CarCatApp/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">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
เพิ่มสิทธิ์จากไฟล์ Manifest ไปยังไฟล์สิทธิ์
ดูข้อมูลเพิ่มเติมได้ที่สร้างไว้ล่วงหน้าในอิมเมจระบบ
ไซด์โหลด
นอกจากนี้ คุณยังโหลดไฟล์สิทธิ์จากแหล่งที่ไม่รู้จักได้ด้วย ใช้วิธีนี้เมื่อไม่ได้กำหนดค่า Dashcam ที่สร้างขึ้นล่วงหน้า
ใช้ไฟล์สิทธิ์ที่สร้างในส่วน "ที่สร้างไว้ล่วงหน้า" ก่อนหน้านี้ แล้วเรียกใช้คำสั่งต่อไปนี้
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
กำหนดค่าการวางซ้อน
บริการกล้องติดรถยนต์มีการกําหนดค่าที่วางซ้อนกันได้
การกําหนดค่าบริการ
dashcam-service/res/values/config.xml
ไฟล์นี้มีการกำหนดค่าสำหรับบริการ
allow_internal_storage
อนุญาตให้บันทึกเสียงลงในที่จัดเก็บข้อมูลภายในsave_location
ชื่อไดเรกทอรีสำหรับบันทึกไฟล์ ค่าเริ่มต้นคือ dashcammax_storage_mb
ปริมาณพื้นที่เก็บข้อมูลที่จะอนุญาตให้กล้องหน้ารถใช้max_age_days
ระยะเวลาเก็บไฟล์ไว้ก่อนการตัดboot_startup_enabled
บริการกล้องหน้ารถเริ่มทำงานเมื่ออุปกรณ์เปิดเครื่องnotifications_on
แสดงการแจ้งเตือนเมื่อเริ่มการบันทึกnative_recorder
ใช้ NDK API ซึ่งค่าเริ่มต้นคือ Java APInative_renderer
ใช้ NDK API ซึ่งค่าเริ่มต้นคือ Java APIdefault_app_component
แอปพลิเคชั่นกล้องติดรถยนต์เริ่มต้น แอปพลิเคชันนี้มีสิทธิ์เข้าถึงไฟล์บันทึกเสียงทั้งหมดและสิทธิ์เข้าถึงทริกเกอร์ทั้งหมดrecording_module
ComponentName ของการใช้งาน IRecordingModulestreaming_module
ComponentName ของการใช้งาน IRecordingModuletrigger_module
ComponentName ของการใช้งาน IRecordingModule
กำหนดค่าทริกเกอร์
หากต้องการทริกเกอร์การกําหนดค่า ให้เรียกใช้
dashcam-service/src/assets/config.xml
ไฟล์นี้มีการกำหนดค่าสำหรับทริกเกอร์การบันทึก การกําหนดค่าทริกเกอร์ประกอบด้วย 2 ส่วน ได้แก่
รหัสโฆษณาตอนต้น รหัสของกล้อง EVS หรือ Camera2 โดยขึ้นอยู่กับสิ่งที่รองรับ
prerollLengthMs
ความยาวของโฆษณาตอนต้นที่จะจัดเก็บไว้กับแต่ละเหตุการณ์
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
ตัวอย่างนี้แสดงรหัสกล้อง 0 ที่มีโฆษณาตอนต้น 10 วินาที
name
ชื่อทริกเกอร์ที่ไม่ซ้ำกันcamera
รหัสของกล้อง EVS หรือ Camera2 โดยขึ้นอยู่กับสิ่งที่รองรับsensorPropertyID
รหัสของเซ็นเซอร์description
คําอธิบายทริกเกอร์ที่แสดงใน UIrecordingLengthMs
ระยะเวลาหลังจากเหตุการณ์ที่จะบันทึกเป็นมิลลิวินาทีsensorType
เซ็นเซอร์ประเภทใด ตัวเลือกคือVHAL
หรือSENSOR_MANAGER
sensorValueType
ประเภทข้อมูลที่เซ็นเซอร์สร้างขึ้น ตัวเลือกคือINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
และBOOLEAN, STRING
thresholdType
วิธีประเมินค่าเซ็นเซอร์ ตัวเลือก ได้แก่AVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
และPEAK_HOLD
thresholdValue
ค่าที่จะเปรียบเทียบค่าเซ็นเซอร์กับประเภทเกณฑ์thresholdExtra
ค่าเพิ่มเติมที่จําเป็นสําหรับเกณฑ์บางประเภท เช่น ช่วง สําหรับAVERAGE
triggerCooldown
ระยะเวลาพักก่อนที่จะเรียกเหตุการณ์ประเภทนี้อีกรายการในหน่วยมิลลิวินาที
<EventTriggers>
<EventTrigger
name="AEB"
camera="1 2"
sensorPropertyID="289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorType="VHAL"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
ตัวอย่างนี้แสดงเซ็นเซอร์ VHAL ที่สร้างค่าจำนวนเต็มซึ่งเราเปรียบเทียบความเท่าเทียมกับค่าเกณฑ์ เมื่อเป็นไปตามเงื่อนไขความเท่ากัน ทริกเกอร์จะบันทึกในกล้อง 1 และ 2
<EventTrigger
name="SPEED"
camera="1 2 3 4"
sensorPropertyID="291504648"
description="Over speed"
recordingLengthMs="10000"
sensorType="VHAL"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="1000"
triggerCooldown="2000"/>
ตัวอย่างนี้แสดงเซ็นเซอร์ VHAL ที่สร้างค่าประเภท float ซึ่งเราประเมินค่าเฉลี่ยของช่วงตัวอย่างเทียบกับค่าเกณฑ์ ตั้งค่าช่วงตัวอย่างใน thresholdExtra
โมดูล
บริการ Dashcam ประกอบด้วย 3 โมดูล ได้แก่
สตรีมมีตรรกะสำหรับการจัดการสตรีมจากกล้อง
Recording มีตรรกะสำหรับการจัดการไฟล์บันทึกเสียง
ทริกเกอร์มีตรรกะในการเรียกให้บันทึกจากข้อมูลเซ็นเซอร์ ระบบจะกำหนด API ของโมดูลในอินเทอร์เฟซที่เกี่ยวข้อง ซึ่งได้แก่
IStreamModule
,IRecorderModule
และITriggerModule
และแสดงต่อ DashcamManager ผ่านDashcamServiceAPI
โมดูลการวางซ้อน
บริการ Dashcam ใช้ dashcam-service/res/values/config.xml
เพื่อระบุตำแหน่งที่จะค้นหาการติดตั้งใช้งานโมดูล เรามีการติดตั้งใช้งานเริ่มต้นสําหรับแต่ละข้อบังคับ อย่างไรก็ตาม คุณสามารถวางซ้อนแต่ละโมดูลได้โดยการตั้งค่าคอมโพเนนต์ในค่าการกําหนดค่าที่สอดคล้องกัน
ตั้งชื่อคอมโพเนนต์การติดตั้งใช้งาน OEM ของ
IRecorderModule
เป็นrecording_module
ตั้งชื่อคอมโพเนนต์การใช้งาน OEM ของ
IStreamModule
เป็น "สตรีมมิง"ตั้งชื่อคอมโพเนนต์การติดตั้งใช้งาน OEM ของ
ITriggerModule
เป็นtrigger_module
ขณะรันไทม์ บริการ Dashcam จะสร้างอินสแตนซ์ชื่อคอมโพเนนต์ที่ตั้งค่าไว้ใน
config.xml
สำหรับแต่ละโมดูล
คู่มือสําหรับนักพัฒนาแอป
Dashcam เป็นโซลูชันกล้องติดรถยนต์ที่พร้อมใช้งานจริงและปรับแต่งได้ กล้องติดหน้ารถใช้ Dashcam Manager API เพื่อสื่อสารกับ Dashcam service
Dashcam
Manager API มีอยู่ที่ IDashcamManager
แอปใดก็ตามที่มีสิทธิ์ที่จําเป็นสามารถใช้เครื่องมือจัดการ Dashcam ได้
สิทธิ์
รองรับ Camera2 และ EVS
สำเร็จรูป
วิธีที่ง่ายที่สุดในการให้สิทธิ์เหล่านี้คือการรวมไว้ในการตั้งค่าที่สร้างไว้ล่วงหน้าโดยใช้ Blueprint หรือ Make
OverlayUI
คุณปรับแต่งแอปได้ด้วยการวางซ้อนทรัพยากรรันไทม์ ดูข้อมูลเพิ่มเติมได้ที่การวางซ้อนทรัพยากรรันไทม์ หากต้องการดูรายการองค์ประกอบที่วางซ้อนกันได้ โปรดดู overlayable.xml
ขยายทริกเกอร์
ทริกเกอร์สามารถขยายเวลาสำหรับเซสชันปัจจุบันได้ด้วยการเรียกใช้ DashcamManager.addTrigger()
ทริกเกอร์ที่เพิ่มจะคงอยู่สำหรับเซสชันปัจจุบันเท่านั้น
การเริ่มต้นอัตโนมัติ
ไม่รองรับการเริ่มบันทึกอัตโนมัติ อย่างไรก็ตาม คุณสามารถเริ่มทริกเกอร์ด้วยตนเองonBoot
ด้วยการเรียกใช้ DashcamManager.startRecording()
แนวทางปฏิบัติแนะนำ
พื้นที่เก็บข้อมูล ขอแนะนําอย่างยิ่งให้ใช้อุปกรณ์เก็บข้อมูลแบบถอดออกได้ภายนอก
ประสบการณ์ของผู้ใช้ ออกแบบ UI ของแอป Dashcam ให้ใช้งานง่ายและสะดวก โดยยึดตามหลักเกณฑ์การออกแบบ AAOS
การเพิ่มประสิทธิภาพ เพิ่มประสิทธิภาพของแอปเพื่อลดการใช้ทรัพยากรและช่วยให้แอปทำงานได้อย่างราบรื่นใน AAOS
การแก้ปัญหา
ปัญหาเกี่ยวกับการเชื่อมต่อกล้อง ต้องรองรับ EVS หรือ Camera2 และพร้อมใช้งานใน AAOS IVI
ข้อผิดพลาดเกี่ยวกับพื้นที่เก็บข้อมูล ยืนยันพื้นที่เก็บข้อมูลที่มีอยู่และจัดการไฟล์บันทึกเสียง เราขอแนะนำให้ใช้พื้นที่เก็บข้อมูลภายนอก เนื่องจากการใช้พื้นที่เก็บข้อมูลภายในอาจทำให้พื้นที่เก็บข้อมูลหมดเร็วกว่าปกติ