برنامه 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_module
ComponentName پیاده سازیIRecordingModule
-
streaming_module
ComponentName پیاده سازیIStreamingModule
-
trigger_module
ComponentName پیاده سازی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 پشتیبانی و در دسترس باشد.
خطاهای ذخیره سازی فضای ذخیره سازی موجود را بررسی کنید و ضبط ها را مدیریت کنید. ذخیره سازی خارجی به شدت توصیه می شود زیرا استفاده از حافظه داخلی می تواند باعث فرسودگی زودرس حافظه شود.
برنامه 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_module
ComponentName پیاده سازیIRecordingModule
-
streaming_module
ComponentName پیاده سازیIStreamingModule
-
trigger_module
ComponentName پیاده سازی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 پشتیبانی و در دسترس باشد.
خطاهای ذخیره سازی فضای ذخیره سازی موجود را بررسی کنید و ضبط ها را مدیریت کنید. ذخیره سازی خارجی به شدت توصیه می شود زیرا استفاده از حافظه داخلی می تواند باعث فرسودگی زودرس حافظه شود.
برنامه 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_module
ComponentName پیاده سازیIRecordingModule
-
streaming_module
ComponentName پیاده سازیIStreamingModule
-
trigger_module
ComponentName پیاده سازی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 پشتیبانی و در دسترس باشد.
خطاهای ذخیره سازی فضای ذخیره سازی موجود را بررسی کنید و ضبط ها را مدیریت کنید. ذخیره سازی خارجی به شدت توصیه می شود زیرا استفاده از حافظه داخلی می تواند باعث فرسودگی زودرس حافظه شود.
برنامه 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_module
ComponentName پیاده سازیIRecordingModule
-
streaming_module
ComponentName پیاده سازیIStreamingModule
-
trigger_module
ComponentName پیاده سازی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 پشتیبانی و در دسترس باشد.
خطاهای ذخیره سازی فضای ذخیره سازی موجود را بررسی کنید و ضبط ها را مدیریت کنید. ذخیره سازی خارجی به شدت توصیه می شود زیرا استفاده از حافظه داخلی می تواند باعث فرسودگی زودرس حافظه شود.