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_module
IRecordingModule
लागू करने का ComponentNamestreaming_module
IStreamingModule
लागू करने का ComponentNametrigger_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 काम करना चाहिए और उपलब्ध होना चाहिए.
स्टोरेज से जुड़ी गड़बड़ियां. उपलब्ध स्टोरेज की पुष्टि करना और रिकॉर्डिंग मैनेज करना. हमारा सुझाव है कि आप बाहरी स्टोरेज का इस्तेमाल करें. ऐसा इसलिए, क्योंकि डिवाइस के स्टोरेज का इस्तेमाल करने से, स्टोरेज जल्दी खत्म हो सकता है.