اپلیکیشن Dashcam برای ادغام با AAOS طراحی شده است و قابلیتهای ضبط ویدیو را برای ایمنی و امنیت بیشتر در اختیار رانندگان قرار میدهد. این راهنما الزامات فنی، مراحل ادغام و بهترین شیوهها را برای اطمینان از پیادهسازی موفقیتآمیز تشریح میکند.
پیشنیازها
قبل از ادامه، مطمئن شوید که این پیششرطها برآورده شدهاند:
کیت توسعه نرمافزار:
- SDK 31 یا بالاتر مورد نیاز است.
سختافزار:
- دوربینهای EVS یا Camera2 در دسترس AAOS هستند.
- فضای ذخیرهسازی داخلی کافی یا پشتیبانی از حافظه خارجی قابل جابجایی
باید برای ضبط ویدیو در دسترس باشد.
نیازمندیهای نرمافزاری:
- پشتیبانی بدون محدودیت. برای کسب اطلاعات بیشتر، به برنامههای بدون محدودیت مراجعه کنید.
- مجوزها. دَشکم به مجوزهای سیستم نیاز دارد.
دریافت کد منبع
Dashcam بخشی از برنامههای غیر رایگان AAOS است. برای بررسی کد غیر رایگان، به بخش «بررسی کد» مراجعه کنید.
با استفاده از جستجوی کد اندروید، کد منبع را مرور کنید.
کد منبع در این سه ماژول ارائه شده است:
- سرویس دوربین داشبورد. پخش، ضبط و راهاندازی منطق.
- مدیر دوربین داشبورد. به سرویس دوربین داشبورد متصل میشود و یک API پایدار را در اختیار کلاینتها قرار میدهد.
- اپلیکیشن Dashcam. اپلیکیشن مرجع Dashcam با استفاده از رابط برنامهنویسی کاربردی Dashcam Manager

ساخت دوربین داشبورد
برای ساخت Dashcam از Soong یا Gradle استفاده کنید.
سونگ
در مورد سونگ:
mma DashcamService DashcamManager-lib DashcamApp
فایلهای APK در out/target/product/[lunch-target]/system/priv-app/ قرار دارند.
گرادل
روی گریدل:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
فایلهای APK در out/aaos-apps-gradle-build/ قرار دارند.
دستورالعملهای دقیق برای ساخت Dashcam با Gradle در فایل README ارائه شده است.
مجوزها
چندین مجوز سیستمی برای سرویس و برنامه Dashcam مورد نیاز است.
سادهترین راه برای اعطای این مجوزها، گنجاندن آنها در یک تنظیمات از پیش ساخته شده با استفاده از Blueprint یا 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,
}
در ساخت:
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>
مجوزهای Manifest را به فایل مجوزها اضافه کنید.
قبل از استفاده از Dashcam، مجوزهای Camera2 را همانطور که در AAOS Camera نشان داده شده است، به سرویس Dashcam اعطا کنید.
فایل مجوزهای از پیش تعیینشده را به همان روشی که فایل مجوزها را اضافه میکنید، به فایل 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,
}
برای کسب اطلاعات بیشتر، به «ادغام پیشساخت در یک تصویر سیستم» و «افزودن یک لیست مجاز» مراجعه کنید.
سایدلود
فایل مجوزها همچنین میتواند از طریق sideload بارگذاری شود. از این روش زمانی استفاده کنید که Dashcam از پیش ساخته شده پیکربندی نشده باشد.
با استفاده از فایل مجوزهایی که قبلاً در بخش پیشساختهها ایجاد شده است، دستور زیر را اجرا کنید:
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
فایل مجوزهای pregrant را به روشی مشابه به etc/default-permissions/ اضافه کنید.
پیکربندی پوششها
سرویس Dashcam دارای تنظیمات قابل همپوشانی است.
پیکربندی سرویس
dashcam-service/res/values/config.xml
این فایل شامل تنظیمات مربوط به سرویس است:
-
config_fileنام فایل پیکربندی تریگر در/assets -
allow_internal_storageاجازه میدهد ضبطها در حافظه داخلی ذخیره شوند -
boot_startup_enabledسرویس Dashcam هنگام بوت شدن دستگاه شروع به کار میکند -
notifications_onنمایش اعلانها هنگام شروع ضبط -
default_app_componentبرنامه پیشفرض دوربین داشبورد که به ضبطهای سراسری و دسترسی به تریگر سراسری دسترسی دارد. -
recording_moduleنام کامپوننت پیادهسازیIRecordingModule -
streaming_moduleنام کامپوننت پیادهسازیIStreamingModule -
trigger_moduleنام کامپوننت پیادهسازیITriggerModule
پیکربندی تریگر
برای پیکربندی محرکهای ضبط، یک کپی از موارد زیر ایجاد کنید:
dashcam-service/src/assets/config.xml
و این را به دایرکتوری assets اضافه کنید. در عنصر config_file در فایل پیکربندی سرویس، به این فایل اشاره کنید.
پیکربندی تریگر شامل بخشهای ذخیرهسازی، دوربین و تریگر است:
ذخیرهسازی
پیکربندی ذخیرهسازی دارای عناصر زیر است:
maxStorageUsagePercentدرصد استفاده از فضای ذخیرهسازی موجود توسط دوربین داشبورد قبل از حذف ضبطها.حداکثر میزان فضای ذخیرهسازی (مگابایت) که دوربین داشبورد قبل از حذف فایلهای ضبطشده اشغال میکند
maxStorageUsageMegabytes.maxAgeHoursBeforePruneحداکثر تعداد ساعت قبل از هرس شدن یک فایل ضبط شده. در صورت رعایت محدودیتهای ذخیرهسازی، میتوان فایل ضبط شده را زودتر هرس کرد.
دوربین
پیکربندی دوربین دارای عناصر زیر است:
شناسه دوربین. شناسه دوربین به همراه پیشوند دوربین.
prerollLengthMsطول preroll که با هر رویداد ذخیره میشود.widthعرض اختیاری بافر برگردانده شده توسط دوربین.heightارتفاع اختیاری بافر برگردانده شده توسط دوربین.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
این مثال دوربین با شناسه EVS:1 را با پیشنمایش ۱۰ ثانیهای در وضوح ۱۰۸۰p و دوربین با شناسه Camera2:1 را با پیشنمایش ۱۰ ثانیهای و عرض و ارتفاع پیشفرض نشان میدهد.
ماشه
پیکربندی تریگر شامل فهرستی از تریگرها است که به صورت زیر تعریف میشوند:
nameنام منحصر به فرد تریگر.شناسه
cameras.sensorPropertyIDشناسه حسگر است که با گروه حسگر پیشوند شده است. گزینههای پیشوند عبارتند ازVHALیاSENSOR_MANAGER.descriptionشرح تریگر (trigger) که در رابط کاربری نمایش داده میشود.مدت زمان
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) را نشان میدهد که در آن TriggerModule یک حسگر VHAL را که مقادیر صحیح تولید میکند، رصد میکند. TriggerModule برابری را با مقدار آستانه مقایسه میکند. هنگامی که شرط برابری برقرار شود، یک تریگر (trigger) روی دوربینهای EVS 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 تنظیم شده است. یک رویداد جدید فقط میتواند هر 2000 میلیثانیه طبق تنظیم triggerCooldown فعال شود.
ماژولها
سرویس Dashcam از سه ماژول تشکیل شده است:
Stream شامل منطق لازم برای مدیریت جریانهای ارسالی از دوربینها است.
ضبط شامل منطق لازم برای مدیریت ضبطها است.
Trigger شامل منطق لازم برای شروع ضبط از دادههای حسگر است. APIهای ماژول در رابطهای مربوطه خود،
IStreamModule،IRecorderModuleوITriggerModuleتعریف شدهاند و از طریقDashcamServiceAPIدر اختیارDashcamManagerقرار میگیرند.
ماژولهای روکش
سرویس Dashcam از dashcam-service/res/values/config.xml برای تعیین محل یافتن پیادهسازیهای ماژول استفاده میکند. پیادهسازیهای پیشفرض برای هر ماژول ارائه شده است. با این حال، میتوان با تنظیم مؤلفه آن در مقدار پیکربندی مربوطه، هر ماژول را همپوشانی کرد.
نام کامپوننت پیادهسازی OEM را برای موارد زیر تنظیم کنید:
-
IRecorderModuleبهrecording_module -
IStreamModuleبهstreaming_module -
ITriggerModuleبهtrigger_module
در زمان اجرا، سرویس Dashcam نام کامپوننت تنظیمشده در config.xml را برای هر ماژول نمونهسازی میکند.
راهنمای توسعهدهنده اپلیکیشن
Dashcam یک راهکار Dashcam آماده برای تولید و قابل تنظیم است. Dashcam از APIهای Dashcam Manager برای ارتباط با Dashcam service استفاده میکند. API Dashcam Manager را میتوانید در IDashcamManager پیدا کنید. هر برنامهای که مجوزهای لازم را داشته باشد میتواند از Dashcam Manager استفاده کند.
OverlayUI
این برنامه را میتوان با Runtime Resource Overlays سفارشی کرد. برای کسب اطلاعات بیشتر، به Runtime Resource Overlays مراجعه کنید. برای مشاهده لیست عناصر قابل همپوشانی، به overlayable.xml مراجعه کنید.
محرکها را گسترش دهید
تریگرها را میتوان با فراخوانی DashcamManager#addTrigger() برای جلسه فعلی تمدید کرد. تریگرهای اضافه شده فقط برای جلسه فعلی باقی میمانند.
شروع خودکار
ضبط خودکار پشتیبانی نمیشود. با این حال، میتوان با فراخوانی DashcamManager.startRecording() onBoot یک تریگر دستی راهاندازی کرد.
بهترین شیوهها
فضای ذخیرهسازی. استفاده از حافظه خارجی قابل جابجایی اکیداً توصیه میشود.
تجربه کاربری. رابط کاربری اپلیکیشن Dashcam را طوری طراحی کنید که کاربرپسند و کاربرپسند باشد و از دستورالعملهای طراحی AAOS پیروی کند.
بهینهسازی عملکرد. عملکرد برنامه را بهینه کنید تا استفاده از منابع را به حداقل برسانید و عملکرد روان را در AAOS تضمین کنید.
عیبیابی
مشکلات اتصال دوربین. EVS یا Camera2 باید در AAOS IVI پشتیبانی و در دسترس باشند.
خطاهای ذخیرهسازی. فضای ذخیرهسازی موجود را بررسی کنید و ضبطها را مدیریت کنید. استفاده از حافظه خارجی اکیداً توصیه میشود زیرا استفاده از حافظه داخلی میتواند باعث فرسودگی زودرس فضای ذخیرهسازی شود.