دمج كاميرا Dashcam

تم تصميم تطبيق Dashcam للدمج مع AAOS، ما يمنح السائقين إمكانيات تسجيل الفيديو لتعزيز السلامة والأمان. يوضّح هذا الدليل المتطلبات الفنية وخطوات الدمج وأفضل الممارسات ل ضمان تنفيذ ناجح.

المتطلّبات الأساسية

قبل المتابعة، تأكَّد من استيفاء الشروط الأساسية التالية:

حزمة SDK:

  • يجب توفُّر الإصدار 31 من حزمة تطوير البرامج (SDK) أو إصدار أحدث.

الأجهزة:

  • كاميرات EVS أو Camera2 المتاحة لنظام التشغيل AAOS
  • يجب أن تتوفّر مساحة تخزين داخلية كافية أو أن يكون الجهاز متوافقًا مع وحدات التخزين الخارجية القابلة للإزالة
    لتسجيل الفيديوهات.

متطلبات البرامج:

  • الدعم غير المُضمَّن في الحزمة: لمزيد من المعلومات، يُرجى الاطّلاع على مقالة التطبيقات التي تم إلغاء تجميعها.
  • الأذونات: يتطلّب تطبيق Dashcam الحصول على أذونات النظام.

الحصول على رمز المصدر

يمكنك العثور على رمز المصدر في "بحث الرموز البرمجية لنظام التشغيل Android" على الرابط التالي:

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

يتم توفير رمز المصدر في الوحدات الثلاث التالية:

  • خدمة كاميرا Dashcam: منطق البث والتسجيل والتشغيل
  • مدير كاميرا Dashcam يتصل بخدمة كاميرا السرعة ويوفّر واجهة برمجة تطبيقات مستقرة للعملاء.
  • تطبيق Dashcam: يمكنك الرجوع إلى تطبيق Dashcam باستخدام واجهة برمجة التطبيقات Dashcam Manager API.

مخطّط البنية

إنشاء كاميرا Dashcam

استخدِم Soong أو Gradle لإنشاء تطبيق Dashcam.

سونغ

قبل إنشاء التطبيق من Soong، احرص على تنظيف أدلة .cxx.

على Soong:

mma DashcamService DashcamManager-lib DashcamApp

يمكن العثور على حِزم APK في out/target/product/[lunch-target]/system/priv-app/.

Gradle

في 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"],
}

في Make:

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">
      <permission name="" />
  </privapp-permissions>
  <privapp-permissions package="com.android.car.dashcam.app">
      <permission name="" />
  </privapp-permissions>
</permissions>

أضِف الأذونات من البيان إلى ملف الأذونات.

لمزيد من المعلومات، يُرجى الاطّلاع على التطبيقات المُنشأة مسبقًا في صورة نظام.

التحميل الجانبي

يمكن أيضًا تثبيت ملف الأذونات من مصدر غير معروف. استخدِم هذه الطريقة عندما لا تكون كاميرا الdashcam المُنشأة مسبقًا مُعدَّة.

باستخدام ملف الأذونات الذي تم إنشاؤه في قسم "الإصدارات المُسبقة الإنشاء" سابقًا، نفِّذ ما يلي:

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-service/res/values/config.xml

يحتوي هذا الملف على إعدادات الخدمة:

  • allow_internal_storage السماح بحفظ التسجيلات في وحدة التخزين الداخلية
  • save_location اسم الدليل الذي سيتم حفظ التسجيلات فيه القيمة التلقائية هي dashcam
  • max_storage_mb مقدار مساحة التخزين التي يمكن أن تستخدمها كاميرا داشكاميرا
  • max_age_days المدة التي يتم خلالها الاحتفاظ بملف قبل إزالة المحتوى غير الهام
  • boot_startup_enabled بدء خدمة Dashcam عند تشغيل الجهاز
  • notifications_on عرض الإشعارات عند بدء التسجيل
  • native_recorder استخدام واجهات برمجة تطبيقات NDK، الإعداد التلقائي هو واجهات برمجة تطبيقات Java
  • native_renderer استخدام واجهات برمجة تطبيقات NDK، الإعداد التلقائي هو واجهات برمجة تطبيقات Java
  • default_app_component تطبيق كاميرا داش التلقائي، وهو تطبيق يتمتع بإمكانية الوصول إلى التسجيلات العالمية وإمكانية الوصول إلى عوامل التفعيل العالمية
  • recording_module اسم المكوِّن لتنفيذ IRecordingModule
  • streaming_module اسم المكوِّن لتنفيذ IRecordingModule
  • trigger_module اسم المكوِّن لتنفيذ 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 وصف عامل الظهور الذي يظهر في واجهة المستخدم

  • 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 من ثلاث وحدات:

  • يحتوي البث على منطق معالجة أحداث البث من الكاميرات.

  • يحتوي التسجيل على منطق معالجة التسجيلات.

  • يحتوي العامل المشغِّل على منطق بدء التسجيل من بيانات أجهزة الاستشعار. يتم تعريف واجهات برمجة تطبيقات الوحدة في واجهاتها المقابلة، وهي IStreamModule وIRecorderModule وITriggerModule، ويتم عرضها على DashcamManager من خلال DashcamServiceAPI.

وحدات الإعلانات التي تظهر على سطح الفيديو

تستخدِم خدمة Dashcam dashcam-service/res/values/config.xml لتحديد مكان العثور على عمليات تنفيذ الوحدات. نقدّم عمليات تنفيذ تلقائية لكل وحدة. ومع ذلك، يمكن تراكب كل وحدة من خلال ضبط مكوّنها في قيمة الإعدادات المقابلة.

  • اضبط اسم مكوّن تنفيذ المصنّع الأصلي للجهاز IRecorderModule على recording_module.

  • اضبط اسم مكوّن تنفيذ المصنّع الأصلي للجهاز IStreamModule على وحدة البث.

  • اضبط اسم مكوّن تنفيذ المصنّع الأصلي للجهاز ITriggerModule على trigger_module.

    أثناء التشغيل، تنشئ خدمة Dashcam مثيلًا لاسم المكوّن الذي تم ضبطه في config.xml لكل وحدة.

دليل مطوّري التطبيقات

‫Dashcam هو حلّ وقابل للتخصيص لكاميرا داش. تستخدم كاميرا Dashcam واجهات برمجة تطبيقات Dashcam Manager للتواصل مع Dashcam service. يمكن العثور على واجهة برمجة التطبيقات Dashcam Manager API على الرابط IDashcamManager. يمكن لأي تطبيق لديه التصاريح المطلوبة استخدام "مدير كاميرا Dashcam".

الأذونات

كاميرا 2 وEVS متاحان.

مركّبة مسبقًا

إنّ أسهل طريقة لمنح هذه الأذونات هي تضمينها في الإعداد المُعدّ مسبقًا باستخدام Blueprint أو Make.

OverlayUI

يمكن تخصيص التطبيق باستخدام "تراكبات موارد وقت التشغيل". لمزيد من المعلومات، يُرجى الاطّلاع على تراكبات الموارد أثناء التشغيل. لاطلاعك على قائمة العناصر التي يمكن تداخلها، اطّلِع على overlayable.xml.

توسيع نطاق العوامل المشغِّلة

يمكن تمديد عوامل التفعيل للجلسة الحالية من خلال طلب إلى DashcamManager.addTrigger(). تبقى عوامل التفعيل المُضافة محفوظة للجلسة الحالية فقط.

التشغيل التلقائي

ميزة بدء التسجيل تلقائيًا غير متاحة. ومع ذلك، يمكن بدؤه يدوياًonBoot من خلال مكالمة إلى DashcamManager.startRecording().

أفضل الممارسات

  • مساحة التخزين: ننصح بشدة باستخدام وحدة تخزين خارجية قابلة للإزالة.

  • تجربة المستخدم: يجب تصميم واجهة مستخدم تطبيق Dashcam بحيث تكون سهلة الاستخدام ومتوافقة مع إرشادات تصميم AAOS.

  • تحسين الأداء: تحسين أداء التطبيق لتقليل استخدام الموارد وضمان التشغيل السلس في نظام التشغيل AAOS

تحديد المشاكل وحلّها

  • مشاكل في الاتصال بالكاميرا: يجب أن تكون تقنية EVS أو Camera2 متوافقة ومتوفرة في واجهة برمجة التطبيقات لعرض الفيديو في نظام التشغيل AAOS.

  • أخطاء في مساحة التخزين: التحقّق من مساحة التخزين المتوفّرة وإدارة التسجيلات ننصحك بشدة باستخدام وحدة تخزين خارجية لأنّ استخدام وحدة التخزين الداخلية يمكن أن يؤدي إلى تلفها قبل الأوان.