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

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

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

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

SDK टूल:

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

हार्डवेयर:

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

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

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

Dashcam, AAOS के उन ऐप्लिकेशन में शामिल है जिन्हें अलग से डाउनलोड किया जा सकता है. अनबंड किए गए कोड की जांच करने के लिए, कोड की जांच करें लेख पढ़ें.

Android Code Search की मदद से सोर्स कोड ब्राउज़ करें.

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

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

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

Dashcam बनाना

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

सोंग

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"],
}

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>

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

Dashcam का इस्तेमाल करने से पहले, Dashcam सेवा को 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,
}

ज़्यादा जानने के लिए, पहले से बने वर्शन को सिस्टम इमेज में इंटिग्रेट करना और अनुमति वाली सूची जोड़ना लेख पढ़ें.

साइडलोड

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

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

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

ट्रिगर कॉन्फ़िगरेशन

रिकॉर्डिंग ट्रिगर कॉन्फ़िगर करने के लिए, इनकी कॉपी बनाएं:

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 के साथ 1080 पिक्सल में 10 सेकंड का प्रीरोल और कैमरा आईडी Camera2:1 के साथ 10 सेकंड का प्रीरोल और डिफ़ॉल्ट चौड़ाई और ऊंचाई दिखाई गई है.

ट्रिगर करने पर

ट्रिगर कॉन्फ़िगरेशन में, ट्रिगर की एक सूची होती है. इसमें ये ट्रिगर शामिल होते हैं:

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

  • cameras कैमरों के आईडी.

  • sensorPropertyID सेंसर ग्रुप के साथ प्रीफ़िक्स किया गया सेंसर का आईडी. प्रीफ़िक्स के विकल्प VHAL या SENSOR_MANAGER हैं.

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

  • recordingLengthMs इवेंट के बाद रिकॉर्ड करने के लिए, मिलीसेकंड में अवधि.

  • sensorValueType सेंसर से मिलने वाले डेटा का टाइप. इसके विकल्प हैं: INT, INT_ARRAY, FLOAT, FLOAT_ARRAY, और BOOLEAN, STRING.

  • thresholdType thresholdValue के मुकाबले सेंसर वैल्यू का आकलन कैसे करें. इसके विकल्प हैं: AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK, और PEAK_HOLD.

  • thresholdValue सेंसर वैल्यू से तुलना की गई वैल्यू.

  • thresholdExtra AVERAGE के लिए रेंज जैसी कुछ थ्रेशोल्ड टाइप के लिए ज़रूरी अतिरिक्त वैल्यू.

  • triggerCooldown इस तरह का कोई दूसरा इवेंट ट्रिगर करने से पहले, मिलीसेकंड में कूल-डाउन.

<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, थ्रेशोल्ड वैल्यू के बराबर होने की तुलना करता है. बराबर होने की शर्त पूरी होने पर, ईवीएस कैमरा 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 में सेट है. नया इवेंट सिर्फ़ triggerCooldown में सेट किए गए हर 2000 मिलीसेकंड पर ट्रिगर हो सकता है.

मॉड्यूल

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

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

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

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

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

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

इनके लिए OEM लागू करने वाले कॉम्पोनेंट का नाम सेट करें:

  • IRecorderModule से recording_module
  • IStreamModule से streaming_module
  • ITriggerModule से trigger_module

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

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

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

OverlayUI

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

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

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

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

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

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

  • स्टोरेज. हमारा सुझाव है कि आप बाहरी स्टोरेज का इस्तेमाल करें.

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

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

समस्या का हल

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

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