Dashcam ऐप्लिकेशन को AAOS के साथ इंटिग्रेट करने के लिए डिज़ाइन किया गया है. इससे ड्राइवरों को बेहतर सुरक्षा के लिए, वीडियो रिकॉर्ड करने की सुविधा मिलती है. इस गाइड में, तकनीकी ज़रूरी शर्तों, इंटिग्रेशन के चरणों, और सबसे सही तरीकों के बारे में बताया गया है, ताकि यह पक्का किया जा सके कि इसे सही तरीके से लागू किया जा सके.
ज़रूरी शर्तें
जारी रखने से पहले, पक्का करें कि ये ज़रूरी शर्तें पूरी की गई हों:
SDK टूल:
- SDK टूल का वर्शन 31 या इसके बाद का होना चाहिए.
हार्डवेयर:
- AAOS के लिए उपलब्ध ईवीएस या Camera2 कैमरे.
- वीडियो रिकॉर्डिंग के लिए, डिवाइस में ज़रूरत के मुताबिक स्टोरेज होना चाहिए या डिवाइस में बाहरी स्टोरेज
जोड़ने की सुविधा होनी चाहिए.
सॉफ़्टवेयर से जुड़ी ज़रूरी शर्तें:
- अलग-अलग तरह की सहायता. ज़्यादा जानने के लिए, अलग-अलग बंडल में उपलब्ध ऐप्लिकेशन लेख पढ़ें.
- अनुमतियां. Dashcam को सिस्टम की अनुमतियां चाहिए.
सोर्स कोड पाना
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_moduleIRecordingModuleलागू करने का ComponentNamestreaming_moduleIStreamingModuleलागू करने का ComponentNametrigger_moduleITriggerModuleलागू करने का 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.thresholdTypethresholdValueके मुकाबले सेंसर वैल्यू का आकलन कैसे करें. इसके विकल्प हैं:AVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAK, औरPEAK_HOLD.thresholdValueसेंसर वैल्यू से तुलना की गई वैल्यू.thresholdExtraAVERAGEके लिए रेंज जैसी कुछ थ्रेशोल्ड टाइप के लिए ज़्यादा वैल्यू की ज़रूरत होती है.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_moduleIStreamModuleसेstreaming_moduleITriggerModuleसे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 काम करना चाहिए और उपलब्ध होना चाहिए.
स्टोरेज से जुड़ी गड़बड़ियां. उपलब्ध स्टोरेज की पुष्टि करना और रिकॉर्डिंग मैनेज करना. हमारा सुझाव है कि आप बाहरी स्टोरेज का इस्तेमाल करें. ऐसा इसलिए, क्योंकि डिवाइस के स्टोरेज का इस्तेमाल करने से, स्टोरेज जल्दी खत्म हो सकता है.