برنامه Dashcam برای ادغام با AAOS طراحی شده است و به درایورها قابلیت ضبط ویدیو برای افزایش ایمنی و امنیت را ارائه می دهد. این راهنما الزامات فنی، مراحل یکپارچه سازی و بهترین شیوه ها را برای اطمینان از اجرای موفقیت آمیز تشریح می کند.
پیش نیازها
قبل از ادامه، مطمئن شوید که این پیش شرط ها برآورده شده اند:
SDK:
- SDK 31 یا بالاتر مورد نیاز است.
سخت افزار:
- دوربینهای EVS یا Camera2 در دسترس AAOS هستند.
- فضای ذخیره سازی داخلی کافی یا پشتیبانی از حافظه خارجی قابل جابجایی
باید برای ضبط ویدیو در دسترس باشد.
نرم افزار مورد نیاز:
- پشتیبانی جدا نشده برای کسب اطلاعات بیشتر، به برنامه های Unbundled مراجعه کنید.
- مجوزها Dashcam به مجوزهای سیستم نیاز دارد.
کد منبع را دریافت کنید
کد منبع را در جستجوی کد Android در اینجا بیابید:
کد منبع در این سه ماژول ارائه شده است:
- سرویس داش کم. استریم، ضبط، و منطق راه اندازی.
- مدیر داشکام به سرویس Dashcam متصل می شود و یک API پایدار را در معرض دید مشتریان قرار می دهد
- برنامه Dashcam. مرجع برنامه Dashcam با استفاده از Dashcam Manager API
داش کم را بسازید
از Soong یا Gradle برای ساخت Dashcam استفاده کنید.
سونگ
قبل از ساختن از Soong، حتما دایرکتوری های .cxx
را تمیز کنید.
در سونگ:
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"],
}
در ساخت:
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.service">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
مجوزها را از Manifest به فایل مجوزها اضافه کنید.
برای کسب اطلاعات بیشتر، به Prebuilt into a system image مراجعه کنید.
بار جانبی
فایل مجوزها را نیز می توان جانبی بارگذاری کرد. زمانی که داش کم از پیش ساخته شده پیکربندی نشده است از این روش استفاده کنید.
با استفاده از فایل مجوزهای ایجاد شده در قسمت پیش ساخته شده قبلی، اجرا کنید:
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 دارای پیکربندی های قابل همپوشانی است.
پیکربندی سرویس
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
از API های NDK استفاده کنید که به طور پیش فرض برای API های جاوا هستند -
native_renderer
از API های NDK استفاده کنید، پیش فرض برای API های جاوا -
default_app_component
برنامه پیشفرض داشکم، این برنامه دسترسی به ضبطهای جهانی و دسترسی ماشه جهانی دارد -
recording_module
ComponentName پیاده سازی IRecordingModule -
streaming_module
ComponentName پیاده سازی IRecordingModule -
trigger_module
ComponentName پیاده سازی IRecordingModule
یک ماشه را پیکربندی کنید
برای راه اندازی پیکربندی، اجرا کنید:
dashcam-service/src/assets/config.xml
این فایل حاوی تنظیماتی برای ضبط محرک ها است. پیکربندی ماشه از دو بخش تشکیل شده است:
شناسه قبل از رول شناسه دوربین یا EVS یا Camera2 بسته به آنچه پشتیبانی می شود.
prerollLengthMs
طول پیش رول برای ذخیره با هر رویداد.
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
این مثال شناسه دوربین 0 را با یک پیش نمایش 10 ثانیه ای نشان می دهد.
name
ماشه منحصر به فردشناسه
camera
دوربین EVS یا Camera2 بسته به آنچه پشتیبانی می شودsensorPropertyID
شناسه سنسورdescription
شرح ماشه ای که در UI نمایش داده می شود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 از سه ماژول تشکیل شده است:
Stream شامل منطق مدیریت جریان از دوربین ها است.
ضبط شامل منطق مدیریت ضبط است.
ماشه شامل منطق شروع ضبط از داده های حسگر است. APIهای ماژول در رابط های مربوطه خود،
IStreamModule
،IRecorderModule
، وITriggerModule
تعریف شده و از طریقDashcamServiceAPI
در معرض DashcamManager قرار می گیرند.
ماژول های پوششی
سرویس Dashcam از dashcam-service/res/values/config.xml
برای تعیین محل یافتن پیادهسازی ماژول استفاده میکند. ما پیاده سازی های پیش فرض را برای هر ماژول ارائه می دهیم. با این حال، هر ماژول را می توان با تنظیم جزء آن در مقدار پیکربندی مربوطه، روی هم گذاشت.
نام مؤلفه پیاده سازی OEM
IRecorderModule
را رویrecording_module
تنظیم کنیدنام مؤلفه پیاده سازی OEM
IStreamModule
را روی ماژول استریم تنظیم کنید.نام مؤلفه پیادهسازی OEM
ITriggerModule
را رویtrigger_module
تنظیم کنیددر زمان اجرا، سرویس Dashcam نام مؤلفه تنظیم شده در
config.xml
را برای هر ماژول نمونه سازی می کند.
راهنمای توسعه دهنده برنامه
Dashcam یک راه حل آماده تولید و قابل تنظیم داشکام است. Dashcam از API های Dashcam Manager برای ارتباط با Dashcam service
استفاده می کند. Dashcam Manager API را میتوانید در IDashcamManager
پیدا کنید. هر برنامه ای با مجوزهای لازم می تواند از Dashcam Manager استفاده کند.
مجوزها
Camera2 و EVS پشتیبانی می شوند.
از پیش ساخته شده است
ساده ترین راه برای اعطای این مجوزها، گنجاندن آنها در تنظیمات از پیش ساخته شده با استفاده از Blueprint یا Make است.
OverlayUI
برنامه را می توان با Runtime Resource Overlays سفارشی کرد. برای کسب اطلاعات بیشتر، به Runtime Resource Overlays مراجعه کنید. برای مشاهده لیست عناصر قابل همپوشانی، به overlayable.xml مراجعه کنید.
محرک ها را گسترش دهید
با فراخوانی به DashcamManager.addTrigger()
می توان تریگرها را برای جلسه جاری گسترش داد. محرک های اضافه شده فقط برای جلسه فعلی باقی می مانند.
شروع خودکار
شروع خودکار ضبط پشتیبانی نمی شود. با این حال، یک راهانداز دستی را میتوان onBoot
با فراخوانی به DashcamManager.startRecording()
راهاندازی کرد.
بهترین شیوه ها
ذخیره سازی. ذخیره سازی قابل جابجایی خارجی به شدت توصیه می شود.
تجربه کاربری. رابط کاربری برنامه Dashcam را طوری طراحی کنید که بصری و کاربرپسند باشد و به دستورالعملهای طراحی AAOS پایبند باشد.
بهینه سازی عملکرد برای به حداقل رساندن استفاده از منابع و اطمینان از عملکرد روان در AAOS، عملکرد برنامه را بهینه کنید.
عیب یابی
مشکلات اتصال دوربین EVS یا Camera2 باید در AAOS IVI پشتیبانی و در دسترس باشد.
خطاهای ذخیره سازی فضای ذخیره سازی موجود را بررسی کنید و ضبط ها را مدیریت کنید. ذخیره سازی خارجی به شدت توصیه می شود زیرا استفاده از حافظه داخلی می تواند باعث فرسودگی زودرس حافظه شود.