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

داش کم را بسازید
از Soong یا Gradle برای ساخت Dashcam استفاده کنید.
سونگ
در سونگ:
mma DashcamService DashcamManager-lib DashcamApp
فایلهای APK در out/target/product/[lunch-target]/system/priv-app/ قرار دارند
گریدل
در Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
فایلهای APK در out/aaos-apps-gradle-build/ قرار دارند
دستورالعمل های دقیق برای ساخت Dashcam با Gradle در فایل README ارائه شده است.
مجوزها
چندین مجوز سیستم برای سرویس Dashcam و برنامه 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، همانطور که در دوربین AAOS نشان داده شده است، مجوزهای Camera2 را به سرویس 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,
}
برای کسب اطلاعات بیشتر، به ادغام یک پیش ساخته در یک تصویر سیستم و افزودن لیست مجاز مراجعه کنید.
بار جانبی
فایل مجوزها را نیز می توان جانبی بارگذاری کرد. زمانی که داش کم از پیش ساخته شده پیکربندی نشده است از این روش استفاده کنید.
با استفاده از فایل مجوزهای ایجاد شده در قسمت پیش ساخته شده قبلی، اجرا کنید:
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_moduleComponentName پیاده سازیIRecordingModule -
streaming_moduleComponentName پیاده سازیIStreamingModule -
trigger_moduleComponentName پیاده سازیITriggerModule
پیکربندی ماشه
برای پیکربندی محرک های ضبط، یک کپی از موارد زیر ایجاد کنید:
dashcam-service/src/assets/config.xml
و این را به فهرست دارایی ها اضافه کنید. به این فایل در عنصر config_file در فایل پیکربندی سرویس اشاره کنید.
پیکربندی ماشه شامل ذخیره سازی، دوربین و بخش های ماشه است:
ذخیره سازی
پیکربندی ذخیره سازی دارای عناصر زیر است:
maxStorageUsagePercentحداکثر درصد از فضای ذخیره سازی موجود قبل از هرس کردن ضبط ها استفاده می کند.maxStorageUsageMegabytesحداکثر مقدار ذخیره سازی بر حسب مگابایت dashcam قبل از هرس کردن ضبط ها استفاده می کند.maxAgeHoursBeforePruneحداکثر تعداد ساعت قبل از هرس کردن یک ضبط. اگر محدودیتهای ذخیرهسازی رعایت شود، میتوان یک ضبط را زودتر هرس کرد.
دوربین
پیکربندی دوربین دارای عناصر زیر است:
شناسه دوربین شناسه دوربین با پیشوند دوربین.
prerollLengthMsطول پیش نمایش برای ذخیره با هر رویداد.widthعرض اختیاری بافر بازگردانده شده توسط دوربین.heightارتفاع اختیاری بافر بازگردانده شده توسط دوربین.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
این مثال شناسه دوربین EVS:1 را با پیش نمایش 10 ثانیه ای در 1080p و شناسه دوربین Camera2:1 با پیش نمایش 10 ثانیه ای و عرض و ارتفاع پیش فرض را نشان می دهد.
ماشه
پیکربندی ماشه شامل لیستی از محرک ها است که با موارد زیر تعریف شده اند:
nameماشه منحصر به فرد.camerasشناسه دوربین هاشناسه
sensorPropertyIDسنسور با پیشوند گروه حسگر. گزینه های پیشوندVHALیاSENSOR_MANAGERهستند.descriptionشرح ماشه ای که در UI نمایش داده می شود.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 برابری را با مقدار آستانه مقایسه می کند. هنگامی که شرط برابری برآورده می شود، یک ماشه در دوربین های 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 شامل منطق مدیریت جریان از دوربین ها است.
ضبط شامل منطق مدیریت ضبط است.
ماشه شامل منطق شروع ضبط از داده های حسگر است. 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 از API های Dashcam Manager برای ارتباط با Dashcam service استفاده می کند. Dashcam Manager API را میتوانید در IDashcamManager پیدا کنید. هر برنامه ای با مجوزهای لازم می تواند از Dashcam Manager استفاده کند.
OverlayUI
برنامه را می توان با Runtime Resource Overlays سفارشی کرد. برای کسب اطلاعات بیشتر، به Runtime Resource Overlays مراجعه کنید. برای مشاهده لیست عناصر قابل همپوشانی، به overlayable.xml مراجعه کنید.
محرک ها را گسترش دهید
با فراخوانی به DashcamManager#addTrigger() میتوان تریگرها را برای جلسه جاری گسترش داد. محرک های اضافه شده فقط برای جلسه فعلی باقی می مانند.
شروع خودکار
شروع خودکار ضبط پشتیبانی نمی شود. با این حال، یک راهانداز دستی را میتوان onBoot با فراخوانی به DashcamManager.startRecording() راهاندازی کرد.
بهترین شیوه ها
ذخیره سازی. ذخیره سازی قابل جابجایی خارجی به شدت توصیه می شود.
تجربه کاربری. رابط کاربری برنامه Dashcam را طوری طراحی کنید که بصری و کاربرپسند باشد و به دستورالعملهای طراحی AAOS پایبند باشد.
بهینه سازی عملکرد برای به حداقل رساندن استفاده از منابع و اطمینان از عملکرد روان در AAOS، عملکرد برنامه را بهینه کنید.
عیب یابی
مشکلات اتصال دوربین EVS یا Camera2 باید در AAOS IVI پشتیبانی و در دسترس باشد.
خطاهای ذخیره سازی فضای ذخیره سازی موجود را بررسی کنید و ضبط ها را مدیریت کنید. ذخیره سازی خارجی به شدت توصیه می شود زیرا استفاده از حافظه داخلی می تواند باعث فرسودگی زودرس حافظه شود.