ผสานรวม Dashcam

แอป Dashcam ออกแบบมาเพื่อผสานรวมกับ AAOS ซึ่งช่วยให้ผู้ขับขี่มีความสามารถในการบันทึกวิดีโอเพื่อความปลอดภัยยิ่งขึ้น คู่มือนี้จะอธิบายข้อกําหนดทางเทคนิค ขั้นตอนการผสานรวม และแนวทางปฏิบัติแนะนําเพื่อให้การติดตั้งใช้งานประสบความสําเร็จ

สิ่งที่ต้องมีก่อน

โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกําหนดเบื้องต้นต่อไปนี้ก่อนดําเนินการต่อ

SDK:

  • ต้องใช้ SDK 31 ขึ้นไป

ฮาร์ดแวร์:

  • กล้อง EVS หรือ Camera2 ที่พร้อมใช้งานใน AAOS
  • ต้องมีพื้นที่เก็บข้อมูลภายในเพียงพอหรือรองรับที่จัดเก็บข้อมูลภายนอกแบบถอดได้
    สำหรับการบันทึกวิดีโอ

ข้อกำหนดของซอฟต์แวร์

  • การสนับสนุนแบบไม่ได้รวมกลุ่ม ดูข้อมูลเพิ่มเติมได้ที่แอปที่แยกออกมา
  • สิทธิ์ กล้องหน้ารถต้องใช้สิทธิ์เข้าถึงระบบ

รับซอร์สโค้ด

ค้นหาซอร์สโค้ดในการค้นหาโค้ด Android ที่

https://cs.android.com/android/platform/superproject/+/ub-automotive-master-20250219:packages/apps/Car/Dashcam/

ซอร์สโค้ดมีอยู่ในโมดูล 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 ชื่อไดเรกทอรีสำหรับบันทึกไฟล์ ค่าเริ่มต้นคือ dashcam
  • max_storage_mb ปริมาณพื้นที่เก็บข้อมูลที่จะอนุญาตให้กล้องหน้ารถใช้
  • max_age_days ระยะเวลาเก็บไฟล์ไว้ก่อนการตัด
  • boot_startup_enabled บริการกล้องหน้ารถเริ่มทำงานเมื่ออุปกรณ์เปิดเครื่อง
  • notifications_on แสดงการแจ้งเตือนเมื่อเริ่มการบันทึก
  • native_recorder ใช้ NDK API ซึ่งค่าเริ่มต้นคือ Java API
  • native_renderer ใช้ NDK API ซึ่งค่าเริ่มต้นคือ Java API
  • default_app_component แอปพลิเคชั่นกล้องติดรถยนต์เริ่มต้น แอปพลิเคชันนี้มีสิทธิ์เข้าถึงไฟล์บันทึกเสียงทั้งหมดและสิทธิ์เข้าถึงทริกเกอร์ทั้งหมด
  • recording_module ComponentName ของการใช้งาน IRecordingModule
  • streaming_module ComponentName ของการใช้งาน IRecordingModule
  • trigger_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 คําอธิบายทริกเกอร์ที่แสดงใน UI

  • recordingLengthMs ระยะเวลาหลังจากเหตุการณ์ที่จะบันทึกเป็นมิลลิวินาที

  • 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

  • ข้อผิดพลาดเกี่ยวกับพื้นที่เก็บข้อมูล ยืนยันพื้นที่เก็บข้อมูลที่มีอยู่และจัดการไฟล์บันทึกเสียง เราขอแนะนำให้ใช้พื้นที่เก็บข้อมูลภายนอก เนื่องจากการใช้พื้นที่เก็บข้อมูลภายในอาจทำให้พื้นที่เก็บข้อมูลหมดเร็วกว่าปกติ