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

برنامه 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 پشتیبانی و در دسترس باشد.

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