Dashcam'i entegre etme

Dashcam uygulaması, AAOS ile entegre olacak şekilde tasarlanmıştır. Böylece sürücülere daha fazla güvenlik için video kaydı özellikleri sunar. Bu kılavuzda, başarılı bir uygulama sağlamak için teknik koşullar, entegrasyon adımları ve en iyi uygulamalar özetlenmiştir.

Ön koşullar

Devam etmeden önce aşağıdaki ön koşulların karşılandığından emin olun:

SDK:

  • SDK 31 veya daha yeni bir sürüm gerekir.

Donanım:

  • AAOS'ta kullanılabilen EVS veya Camera2 kameralar.
  • Video kayıtları için yeterli dahili depolama alanı veya çıkarılabilir harici depolama desteği
    bulunmalıdır.

Yazılım gereksinimleri:

  • Paket dışı destek Daha fazla bilgi edinmek için Bağımsız Uygulamalar başlıklı makaleyi inceleyin.
  • İzinler. Dashcam için sistem izinleri gerekir.

Kaynak kodunu alma

Kaynak kodunu Android Code Search'te şu adreste bulabilirsiniz:

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

Kaynak kod, aşağıdaki üç modülde sağlanır:

  • Dashcam Hizmeti. Yayınlama, kayıt ve tetikleme mantığı.
  • Dashcam Yöneticisi Dashcam Hizmeti'ne bağlanır ve istemcilere kararlı bir API sunar
  • Dashcam uygulaması. Dashcam Yöneticisi API'sini kullanan referans Dashcam uygulaması

Mimari şeması

Dashcam'i oluşturma

Dashcam'i derlemek için Soong veya Gradle'i kullanın.

Soong

Soong'dan derlemeden önce .cxx dizinlerini temizlediğinizden emin olun.

Soong'da:

mma DashcamService DashcamManager-lib DashcamApp

APK'lar out/target/product/[lunch-target]/system/priv-app/ konumundadır

Gradle

Gradle'de:

./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble

APK'lar out/aaos-apps-gradle-build/ konumundadır

Dashcam'i Gradle ile derlemeyle ilgili ayrıntılı talimatlar README dosyasında verilmiştir.

İzinler

Dashcam Hizmeti ve Dashcam uygulaması için çeşitli sistem izinleri gerekir.

Bu izinleri vermenin en kolay yolu, Blueprint veya Make'i kullanarak önceden oluşturulmuş bir kuruluma dahil etmektir.

Blueprint'te:

Android.bp
android_app_import {
    name: "DashcamApp-prebuilt",
    apk: "DashcamApp.apk",
    privileged: true,
    certificate: "platform",
    required: ["allowed_privapp_com.android.car.dashcam"],
}

Make'te:

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 adlı bir izin dosyası oluşturun:

<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>

Manifest'ten izinleri izin dosyasına ekleyin.

Daha fazla bilgi için sistem görüntüsüne önceden oluşturulmuş bölümüne bakın.

Başka cihazdan yükleme

İzin dosyası, harici olarak da yüklenebilir. Önceden oluşturulmuş araç kamerası yapılandırılmamışsa bu yöntemi kullanın.

Daha önce hazır yapılar bölümünde oluşturulan izin dosyasını kullanarak şunları çalıştırın:

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

Yer paylaşımlarını yapılandırma

Dashcam hizmetinin yer paylaşımlı yapılandırmaları vardır.

Hizmet yapılandırması

dashcam-service/res/values/config.xml

Bu dosya, hizmetle ilgili yapılandırmaları içerir:

  • allow_internal_storage Kayıtların dahili depolama birimine kaydedilmesine izin ver
  • save_location Kayıtların kaydedileceği dizin adı. Varsayılan olarak dashcam değerine ayarlanır.
  • max_storage_mb Dashcam'in kullanmasına izin verilecek depolama alanı miktarı
  • max_age_days Dosyaların budanmadan önce ne kadar süre saklanması gerekir?
  • boot_startup_enabled Cihaz açılırken Dashcam hizmetinin başlatılması
  • notifications_on Kayıt başladığında bildirimleri göster
  • native_recorder NDK API'lerini kullanın, varsayılan olarak Java API'leri kullanılır
  • native_renderer NDK API'lerini kullanın, varsayılan olarak Java API'leri kullanılır
  • default_app_component Varsayılan araç kamerası uygulaması. Bu uygulama, genel kayıt erişimine ve genel tetikleyici erişimine sahiptir.
  • recording_module IRecordingModule uygulamasının ComponentName özelliği
  • streaming_module IRecordingModule uygulamasının ComponentName özelliği
  • trigger_module IRecordingModule uygulamasının ComponentName özelliği

Tetikleyici yapılandırma

Yapılandırmayı tetiklemek için şu komutu çalıştırın:

dashcam-service/src/assets/config.xml

Bu dosya, kayıt tetikleyicilerinin yapılandırmalarını içerir. Tetikleyici yapılandırması iki bölümden oluşur:

  • Videodan önce gösterilen reklam kimliği. Desteklenene bağlı olarak kameranın kimliği (EVS veya Camera2).

  • prerollLengthMs Her etkinlikle birlikte depolanacak ön reklamın uzunluğu.

<Preroll>
  <Camera
      ID="0"
      prerollLengthMs="10000" />
</Preroll>

Bu örnekte, 10 saniyelik videodan önce gösterilen reklam içeren 0 numaralı kamera kimliği gösterilmektedir.

  • name Benzersiz tetikleyici adı

  • camera Desteklenene bağlı olarak kameranın kimliği (EVS veya Camera2)

  • sensorPropertyID Sensörün kimliği

  • description Kullanıcı arayüzünde gösterilen tetikleyicinin açıklaması

  • recordingLengthMs Kaydedilecek etkinliğin milisaniye cinsinden süresi.

  • sensorType Hangi sensör türü. Seçenekler VHAL veya SENSOR_MANAGER'dur.

  • sensorValueType Sensör tarafından üretilen veri türü. Seçenekler şunlardır: INT, INT_ARRAY, FLOAT, FLOAT_ARRAY ve BOOLEAN, STRING

  • thresholdType Sensör değeri nasıl değerlendirilir? Seçenekler AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK ve PEAK_HOLD'tır.

  • thresholdValue Sensör değerinin, eşik türüyle karşılaştırılacağı değer

  • thresholdExtra AVERAGE için aralık gibi bazı eşik türleri için ek değer gerekir

  • triggerCooldown Bu türde başka bir etkinlik tetiklemeden önce milisaniye cinsinden bekleme süresi.

<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>

Bu örnekte, eşittir koşulunu eşik değerle karşılaştırdığımızda tam sayı değerleri üreten bir VHAL sensörü gösterilmektedir. Eşitlik koşulu karşılandığında 1 ve 2 numaralı kameralarda kayıt yapan bir tetikleyici etkinleştirilir.

<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"/>

Bu örnekte, bir dizi örnekteki ortalamayı eşik değere göre değerlendirdiğimiz, kayan nokta değerleri üreten bir VHAL sensörü gösterilmektedir. Örnek aralığı thresholdExtra olarak ayarlandı

Modüller

Dashcam Hizmeti üç modülden oluşur:

  • Stream, kameralardan gelen yayınları işleme mantığını içerir.

  • Kayıt, kayıtları işleme mantığını içerir.

  • Tetikleyici, sensör verilerinden kayıt tetikleme mantığını içerir. Modül API'leri, ilgili arayüzlerinde (IStreamModule, IRecorderModule ve ITriggerModule) tanımlanır ve DashcamServiceAPI üzerinden DashcamManager'a gösterilir.

Yer paylaşımı modülleri

Dashcam Hizmeti, modül uygulamalarını nerede bulacağını belirlemek için dashcam-service/res/values/config.xml özelliğini kullanır. Her modül için varsayılan uygulamalar sağlarız. Ancak her modül, bileşeni ilgili yapılandırma değerine ayarlanarak örtüşebilir.

  • IRecorderModule OEM uygulama bileşeninin adını recording_module olarak ayarlama

  • IStreamModule OEM uygulama bileşeninin adını akış modülü olarak ayarlayın.

  • ITriggerModule OEM uygulama bileşeninin adını trigger_module olarak ayarlama

    Dashcam hizmeti, çalışma zamanında her modül için config.xml içinde ayarlanan bileşen adını örneklendirir.

Uygulama geliştirici kılavuzu

Dashcam, üretime hazır ve özelleştirilebilir bir araç kamerası çözümüdür. Araç içi kamera, Dashcam service ile iletişim kurmak için Dashcam Manager API'lerini kullanır. DashcamManager API'yi IDashcamManager adresinde bulabilirsiniz. Gerekli izinlere sahip tüm uygulamalar Dashcam Yöneticisi'ni kullanabilir.

İzinler

Camera2 ve EVS desteklenir.

Hazır sistem

Bu izinleri vermenin en kolay yolu, Blueprint veya Make'i kullanarak önceden oluşturulmuş kuruluma eklemektir.

OverlayUI

Uygulama, çalışma zamanında kaynak yer paylaşımlarıyla özelleştirilebilir. Daha fazla bilgi için Çalışma zamanında kaynak yer paylaşımları başlıklı makaleyi inceleyin. Yerleştirilebilir öğelerin listesini görmek için overlayable.xml dosyasını inceleyin.

Tetikleyicileri uzatma

Tetikleyiciler, DashcamManager.addTrigger() çağrısı yapılarak geçerli oturum için uzatılabilir. Eklenen tetikleyiciler yalnızca mevcut oturumda devam eder.

Otomatik başlatma

Otomatik kayıt başlatma desteklenmez. Ancak manuel tetikleyici, DashcamManager.startRecording() çağrısı ile onBoot başlatılabilir.

En iyi uygulamalar

  • Depolama alanı. Harici çıkarılabilir depolama alanı kullanmanızı önemle tavsiye ederiz.

  • Kullanıcı deneyimi. Dashcam uygulamasının kullanıcı arayüzünü, AAOS tasarım yönergelerine uygun şekilde sezgisel ve kullanıcı dostu olacak şekilde tasarlayın.

  • Performans optimizasyonu. Kaynak kullanımını en aza indirmek ve AAOS'te sorunsuz çalışma sağlamak için uygulamanın performansını optimize edin.

Sorun giderme

  • Kamera Bağlantısı Sorunları EVS veya Camera2, AAOS IVI'de desteklenmeli ve kullanılabilir olmalıdır.

  • Depolama alanı hataları. Kullanılabilir depolama alanını doğrulayın ve kayıtları yönetin. Dahili depolama alanını kullanmak, depolama alanının erken yıpranmasına neden olabileceğinden harici depolama alanı kullanılması önemle tavsiye edilir.