Dashcam को इंटिग्रेट करना

Dashcam ऐप्लिकेशन को AAOS के साथ इंटिग्रेट करने के लिए डिज़ाइन किया गया है. इससे ड्राइवरों को बेहतर सुरक्षा के लिए, वीडियो रिकॉर्ड करने की सुविधा मिलती है. इस गाइड में, तकनीकी ज़रूरी शर्तों, इंटिग्रेशन के चरणों, और सबसे सही तरीकों के बारे में बताया गया है, ताकि यह पक्का किया जा सके कि इसे सही तरीके से लागू किया जा सके.

ज़रूरी शर्तें

जारी रखने से पहले, पक्का करें कि ये ज़रूरी शर्तें पूरी की गई हों:

SDK टूल:

  • SDK टूल का वर्शन 31 या इसके बाद का होना चाहिए.

हार्डवेयर:

  • AAOS के लिए उपलब्ध ईवीएस या Camera2 कैमरे.
  • वीडियो रिकॉर्डिंग के लिए, डिवाइस में काफ़ी स्टोरेज होना चाहिए या डिवाइस में बाहरी स्टोरेज का इस्तेमाल करने की सुविधा
    होनी चाहिए.

सॉफ़्टवेयर से जुड़ी ज़रूरी शर्तें:

सोर्स कोड पाना

Android Code Search में सोर्स कोड ढूंढने के लिए, यहां जाएं:

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

सोर्स कोड इन तीन मॉड्यूल में दिया गया है:

  • डैशकैम सेवा. स्ट्रीमिंग, रिकॉर्डिंग, और ट्रिगर करने का लॉजिक.
  • Dashcam मैनेजर. यह डैशकैम सेवा से कनेक्ट होता है और क्लाइंट को एक स्थिर एपीआई दिखाता है
  • Dashcam ऐप्लिकेशन. Dashcam Manager API का इस्तेमाल करके, Dashcam ऐप्लिकेशन का रेफ़रंस

आर्किटेक्चर डायग्राम

Dashcam बनाना

Dashcam बनाने के लिए, Soong या Gradle का इस्तेमाल करें.

सोंग

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/ में मौजूद हैं

Gradle की मदद से डैशकैम बनाने के बारे में ज़्यादा जानकारी, README फ़ाइल में दी गई है.

अनुमतियां

Dashcam सेवा और Dashcam ऐप्लिकेशन के लिए, सिस्टम की कई अनुमतियां ज़रूरी हैं.

इन अनुमतियों को देने का सबसे आसान तरीका यह है कि उन्हें ब्लूप्रिंट या Make का इस्तेमाल करके, पहले से बनाए गए सेटअप में शामिल किया जाए.

ब्लूप्रिंट में:

Android.bp
android_app_import {
    name: "DashcamApp-prebuilt",
    apk: "DashcamApp.apk",
    privileged: true,
    certificate: "platform",
    required: ["allowed_privapp_com.android.car.dashcam"],
}

Make में:

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>

मेनिफ़ेस्ट से अनुमतियां फ़ाइल में अनुमतियां जोड़ें.

ज़्यादा जानने के लिए, सिस्टम इमेज में पहले से मौजूद देखें.

साइडलोड

अनुमतियों वाली फ़ाइल को साइडलोड भी किया जा सकता है. पहले से मौजूद डैशकैम को कॉन्फ़िगर न करने पर, इस तरीके का इस्तेमाल करें.

पहले से बने सेक्शन में बनाई गई अनुमतियों की फ़ाइल का इस्तेमाल करके, यह चलाएं:

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 रिकॉर्डिंग सेव करने के लिए डायरेक्ट्री का नाम. डिफ़ॉल्ट रूप से, डैशकैम
  • max_storage_mb डैशकैम को कितना स्टोरेज इस्तेमाल करने की अनुमति देनी है
  • max_age_days डेटा हटाने से पहले, फ़ाइल को कितने समय तक सेव रखना चाहिए
  • boot_startup_enabled डिवाइस के बूट होने पर Dashcam सेवा शुरू होना
  • notifications_on रिकॉर्डिंग शुरू होने पर सूचनाएं दिखाना
  • native_recorder NDK API का इस्तेमाल करना, डिफ़ॉल्ट रूप से Java API का इस्तेमाल करना
  • native_renderer NDK API का इस्तेमाल करना, डिफ़ॉल्ट रूप से Java API का इस्तेमाल करना
  • default_app_component डिफ़ॉल्ट डैशकैम ऐप्लिकेशन. इस ऐप्लिकेशन के पास, रिकॉर्डिंग का ग्लोबल ऐक्सेस और ग्लोबल ट्रिगर का ऐक्सेस होता है
  • recording_module IRecordingModule लागू करने के लिए ComponentName
  • streaming_module IRecordingModule लागू करने के लिए ComponentName
  • trigger_module IRecordingModule लागू करने के लिए ComponentName

ट्रिगर कॉन्फ़िगर करना

कॉन्फ़िगरेशन को ट्रिगर करने के लिए, यह चलाएं:

dashcam-service/src/assets/config.xml

इस फ़ाइल में रिकॉर्डिंग ट्रिगर के कॉन्फ़िगरेशन शामिल होते हैं. ट्रिगर के कॉन्फ़िगरेशन में दो हिस्से होते हैं:

  • प्री-रोल आईडी. कैमरे का आईडी, EVS या Camera2. यह इस बात पर निर्भर करता है कि कौनसी सुविधा काम करती है.

  • prerollLengthMs हर इवेंट के साथ सेव किए जाने वाले प्री-रोल की अवधि.

<Preroll>
  <Camera
      ID="0"
      prerollLengthMs="10000" />
</Preroll>

इस उदाहरण में, कैमरा आईडी 0 को 10 सेकंड के प्री-रोल के साथ दिखाया गया है.

  • name ट्रिगर का यूनीक नाम

  • camera कैमरे का आईडी, जो EVS या Camera2 में से किसी एक के साथ काम करता है

  • sensorPropertyID सेंसर का आईडी

  • description यूज़र इंटरफ़ेस (यूआई) में दिखाए गए ट्रिगर की जानकारी

  • 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 सेंसर दिखाया गया है जो फ़्लोट वैल्यू जनरेट करता है. इसमें, थ्रेशोल्ड वैल्यू के हिसाब से सैंपल की रेंज के औसत का आकलन किया जाता है. सैंपल की रेंज, thresholdExtra में सेट की गई है

मॉड्यूल

Dashcam सेवा में तीन मॉड्यूल होते हैं:

  • स्ट्रीम में, कैमरों से स्ट्रीम मैनेज करने का लॉजिक होता है.

  • रिकॉर्डिंग में रिकॉर्डिंग मैनेज करने का लॉजिक होता है.

  • ट्रिगर में सेंसर डेटा से रिकॉर्डिंग को ट्रिगर करने का लॉजिक होता है. मॉड्यूल एपीआई को उनके इंटरफ़ेस, IStreamModule, IRecorderModule, और ITriggerModule में तय किया गया है. साथ ही, इन्हें DashcamServiceAPI के ज़रिए DashcamManager के लिए उपलब्ध कराया गया है

ओवरले मॉड्यूल

Dashcam Service, dashcam-service/res/values/config.xml का इस्तेमाल करके यह पता लगाती है कि मॉड्यूल को कहां लागू करना है. हम हर मॉड्यूल के लिए डिफ़ॉल्ट लागू करने की सुविधा देते हैं. हालांकि, हर मॉड्यूल को ओवरले किया जा सकता है. इसके लिए, उस मॉड्यूल के कॉम्पोनेंट को उससे जुड़ी कॉन्फ़िगरेशन वैल्यू में सेट करें.

  • OEM लागू करने वाले कॉम्पोनेंट का नाम IRecorderModule से बदलकर recording_module पर सेट करें

  • IStreamModule के OEM लागू करने वाले कॉम्पोनेंट के नाम को स्ट्रीमिंग मॉड्यूल पर सेट करें.

  • OEM लागू करने वाले कॉम्पोनेंट का नाम ITriggerModule से बदलकर trigger_module पर सेट करें

    रनटाइम के दौरान, Dashcam सेवा हर मॉड्यूल के लिए, config.xml में सेट किए गए कॉम्पोनेंट के नाम को इंस्टैंशिएट करती है.

ऐप्लिकेशन डेवलपर के लिए गाइड

Dashcam, प्रोडक्शन के लिए तैयार और अपनी पसंद के मुताबिक बनाया जा सकने वाला डैशकैम सलूशन है. Dashcam, Dashcam service के साथ इंटरैक्ट करने के लिए, Dashcam Manager के एपीआई का इस्तेमाल करता है. Dashcam Manager API, IDashcamManager पर उपलब्ध है. ज़रूरी अनुमतियां रखने वाला कोई भी ऐप्लिकेशन, Dashcam Manager का इस्तेमाल कर सकता है.

अनुमतियां

Camera2 और ईवीएस काम करते हैं.

पहले से बनाए गए

इन अनुमतियों को देने का सबसे आसान तरीका है, Blueprint या Make का इस्तेमाल करके, पहले से बने सेटअप में उन्हें शामिल करना.

OverlayUI

रनटाइम रिसॉर्स ओवरले की मदद से, ऐप्लिकेशन को पसंद के मुताबिक बनाया जा सकता है. ज़्यादा जानने के लिए, रनटाइम रिसॉर्स ओवरले देखें. ओवरले किए जा सकने वाले एलिमेंट की सूची देखने के लिए, overlayable.xml देखें.

ट्रिगर की अवधि बढ़ाना

DashcamManager.addTrigger() पर कॉल करके, मौजूदा सेशन के लिए ट्रिगर को बढ़ाया जा सकता है. जोड़े गए ट्रिगर सिर्फ़ मौजूदा सेशन के लिए बने रहते हैं.

अपने-आप शुरू होने की सुविधा

रिकॉर्डिंग अपने-आप शुरू होने की सुविधा काम नहीं करती. हालांकि, मैन्युअल ट्रिगर को onBoot से कॉल करके शुरू किया जा सकता है DashcamManager.startRecording()

सबसे सही तरीके

  • स्टोरेज. बाहरी स्टोरेज का इस्तेमाल करने का सुझाव दिया जाता है.

  • उपयोगकर्ता अनुभव. AAOS के डिज़ाइन से जुड़े दिशा-निर्देशों का पालन करते हुए, डैशकैम ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को आसान और उपयोगकर्ता के हिसाब से डिज़ाइन करें.

  • परफ़ॉर्मेंस को ऑप्टिमाइज़ करना. संसाधनों के इस्तेमाल को कम करने और AAOS में ऐप्लिकेशन के सही तरीके से काम करने की पुष्टि करने के लिए, ऐप्लिकेशन की परफ़ॉर्मेंस को ऑप्टिमाइज़ करें.

समस्या का हल

  • कैमरे की कनेक्टिविटी से जुड़ी समस्याएं. AAOS IVI में, EVS या Camera2 काम करना चाहिए और उपलब्ध होना चाहिए.

  • स्टोरेज से जुड़ी गड़बड़ियां. उपलब्ध स्टोरेज की पुष्टि करना और रिकॉर्डिंग मैनेज करना. हमारा सुझाव है कि आप बाहरी स्टोरेज का इस्तेमाल करें. ऐसा इसलिए, क्योंकि डिवाइस के स्टोरेज का इस्तेमाल करने से, स्टोरेज जल्दी खत्म हो सकता है.