Dashcam را ادغام کنید

برنامه Dashcam برای ادغام با AAOS طراحی شده است و به درایورها قابلیت ضبط ویدیو برای افزایش ایمنی و امنیت را ارائه می دهد. این راهنما الزامات فنی، مراحل یکپارچه سازی و بهترین شیوه ها را برای اطمینان از اجرای موفقیت آمیز تشریح می کند.

پیش نیازها

قبل از ادامه، مطمئن شوید که این پیش شرط ها برآورده شده اند:

SDK:

  • SDK 31 یا بالاتر مورد نیاز است.

سخت افزار:

  • دوربین‌های EVS یا Camera2 در دسترس AAOS هستند.
  • فضای ذخیره سازی داخلی کافی یا پشتیبانی از حافظه خارجی قابل جابجایی
    باید برای ضبط ویدیو در دسترس باشد.

نرم افزار مورد نیاز:

  • پشتیبانی جدا نشده برای کسب اطلاعات بیشتر، به برنامه های Unbundled مراجعه کنید.
  • مجوزها Dashcam به مجوزهای سیستم نیاز دارد.

کد منبع را دریافت کنید

کد منبع را در جستجوی کد Android در اینجا بیابید:

https://cs.android.com/android/platform/superproject/+/ub-automotive-master-20250219:packages/apps/Car/Dashcam/

کد منبع در این سه ماژول ارائه شده است:

  • سرویس داش کم. استریم، ضبط، و منطق راه اندازی.
  • مدیر داشکام به سرویس 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 پشتیبانی و در دسترس باشد.

  • خطاهای ذخیره سازی فضای ذخیره سازی موجود را بررسی کنید و ضبط ها را مدیریت کنید. ذخیره سازی خارجی به شدت توصیه می شود زیرا استفاده از حافظه داخلی می تواند باعث فرسودگی زودرس حافظه شود.