Dashcam ऐप्लिकेशन को AAOS के साथ इंटिग्रेट करने के लिए डिज़ाइन किया गया है. इससे ड्राइवरों को बेहतर सुरक्षा के लिए, वीडियो रिकॉर्ड करने की सुविधा मिलती है. इस गाइड में, तकनीकी ज़रूरी शर्तों, इंटिग्रेशन के चरणों, और सबसे सही तरीकों के बारे में बताया गया है, ताकि यह पक्का किया जा सके कि इसे सही तरीके से लागू किया जा सके.
ज़रूरी शर्तें
जारी रखने से पहले, पक्का करें कि ये ज़रूरी शर्तें पूरी की गई हों:
SDK टूल:
- SDK टूल का वर्शन 31 या इसके बाद का होना चाहिए.
हार्डवेयर:
- AAOS के लिए उपलब्ध ईवीएस या Camera2 कैमरे.
- वीडियो रिकॉर्डिंग के लिए, डिवाइस में काफ़ी स्टोरेज होना चाहिए या डिवाइस में बाहरी स्टोरेज का इस्तेमाल करने की सुविधा
होनी चाहिए.
सॉफ़्टवेयर से जुड़ी ज़रूरी शर्तें:
- अलग-अलग खरीदे गए प्रॉडक्ट के लिए सहायता. ज़्यादा जानने के लिए, अलग-अलग बंडल में उपलब्ध ऐप्लिकेशन लेख पढ़ें.
- अनुमतियां. Dashcam को सिस्टम की अनुमतियां चाहिए.
सोर्स कोड पाना
Android Code Search में सोर्स कोड ढूंढने के लिए, यहां जाएं:
सोर्स कोड इन तीन मॉड्यूल में दिया गया है:
- डैशकैम सेवा. स्ट्रीमिंग, रिकॉर्डिंग, और ट्रिगर करने का लॉजिक.
- 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 लागू करने के लिए ComponentNamestreaming_module
IRecordingModule लागू करने के लिए ComponentNametrigger_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 काम करना चाहिए और उपलब्ध होना चाहिए.
स्टोरेज से जुड़ी गड़बड़ियां. उपलब्ध स्टोरेज की पुष्टि करना और रिकॉर्डिंग मैनेज करना. हमारा सुझाव है कि आप बाहरी स्टोरेज का इस्तेमाल करें. ऐसा इसलिए, क्योंकि डिवाइस के स्टोरेज का इस्तेमाल करने से, स्टोरेज जल्दी खत्म हो सकता है.