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

Dashcam, AAOS'un paketten çıkarılmış uygulamalarının bir parçasıdır. Paketten çıkarılan koda göz atmak için Kodu inceleme bölümüne bakın.

Android Code Search ile kaynak koduna göz atın.

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

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

Make'te:

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

<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'ten izinleri izin dosyasına ekleyin.

Dashcam'i kullanmadan önce, AAOS Kamera'da gösterildiği gibi Dashcam Hizmeti'ne Camera2 izinlerini önceden verin.

Önceden verilmiş izinler dosyasını, izin dosyasıyla aynı şekilde Blueprint veya Make dosyasına ekleyin.

pre-grant-permissions-com.android.car.dashcam.xml'te:

<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'te:

...
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,
}

Daha fazla bilgi için Ön derlemeyi sistem görüntüsüne entegre etme ve İzin verilenler listesi ekleme başlıklı makaleleri inceleyin.

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 sürümler 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

Önceden izin verme izinleri dosyasını etc/default-permissions/'e benzer şekilde ekleyin.

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:

  • config_file /assets içindeki tetikleyici yapılandırma dosyasının adı
  • allow_internal_storage Kayıtların dahili depolama alanına kaydedilmesine izin ver
  • boot_startup_enabled Cihaz açılırken Dashcam hizmetinin başlatılması
  • notifications_on Kayıt başladığında bildirimleri göster
  • default_app_component Genel kayıt erişimi ve genel tetikleyici erişimi olan varsayılan araç kamerası uygulaması
  • recording_module IRecordingModule uygulamasının ComponentName
  • streaming_module IStreamingModule uygulamasının ComponentName
  • trigger_module ITriggerModule uygulamasının ComponentName

Tetikleyici yapılandırması

Kayıt tetikleyicilerini yapılandırmak için aşağıdakilerin kopyasını oluşturun:

dashcam-service/src/assets/config.xml

ve bunu assets dizinine ekleyin. Hizmet yapılandırma dosyasının config_file öğesinde bu dosyayı işaretleyin.

Tetikleyici yapılandırması depolama alanı, kamera ve tetikleyici bölümlerinden oluşur:

Depolama

Depolama yapılandırması aşağıdaki öğeleri içerir:

  • maxStorageUsagePercent Kayıtları kırpmadan önce araç kamerasının kullandığı maksimum kullanılabilir depolama alanı yüzdesi.

  • maxStorageUsageMegabytes Kayıtları kırpmadan önce araç kamerasının kullandığı maksimum depolama alanı miktarı (megabayt cinsinden).

  • maxAgeHoursBeforePrune Bir kaydın kırpılmasından önceki maksimum saat sayısı. Depolama alanı sınırları karşılanırsa kayıtlar daha önce de kırpılabilir.

Kamera

Kamera yapılandırmasında aşağıdaki öğeler bulunur:

  • Kamera kimliği. Kamera ön ekini içeren kamera kimliği.

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

  • width Kamera tarafından döndürülen arabelleğin isteğe bağlı genişliği.

  • height Kamera tarafından döndürülen arabelleğin isteğe bağlı yüksekliği.

<CameraConfig>
  <Camera
      ID="EVS:1"
      prerollLengthMs="10000"
      width="1920"
      height="1080" />
  <Camera
      ID="Camera2:1"
      prerollLengthMs="10000" />
</CameraConfig>

Bu örnekte, 1080p'de 10 saniyelik ön reklam içeren kamera kimliği EVS:1 ve 10 saniyelik ön reklam ile varsayılan genişlik ve yükseklik içeren kamera kimliği Camera2:1 gösterilmektedir.

Tetikleyici

Tetikleyici yapılandırması, aşağıdakiler tarafından tanımlanan tetikleyicilerin listesinden oluşur:

  • name Benzersiz tetikleyici adı.

  • cameras Kameraların kimlikleri.

  • sensorPropertyID Sensörün, sensör grubuyla birlikte ön ek olarak eklenen kimliği. Önek seçenekleri VHAL veya SENSOR_MANAGER'tür.

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

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

  • 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ğerinin thresholdValue'a göre nasıl değerlendirileceği. Seçenekler şunlardır: AVERAGE, BOOLEAN, EQUALS, LEAP, LEAP_AVERAGE, LEAP_OVER, PEAK ve PEAK_HOLD.

  • thresholdValue Sensör değeriyle karşılaştırılan 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 tetiklenmeden önce milisaniye cinsinden bekleme süresi.

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

Bu örnekte, TriggerModule'ün tam sayı değerleri üreten bir VHAL sensörünü izlediği bir tetikleyici gösterilmektedir. TriggerModule, eşitliği eşik değerle karşılaştırır. Eşitlik koşulu karşılandığında bir tetikleyici, 1 ve 2 numaralı EVS kameralarında kayıt yapar.

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

Bu örnekte, TriggerModule'ün kayan nokta değerleri üreten bir VHAL sensörünü izlediği bir tetikleyici gösterilmektedir. TriggerModule, 10 örnek aralığındaki sensör ortalamasını 20.0 eşik değeriyle karşılaştırır. Örnek aralığı thresholdExtra olarak ayarlanmıştır. Yeni bir etkinlik yalnızca triggerCooldown parametresinde ayarlandığı şekilde 2000 milisaniyede bir tetiklenebilir.

Modüller

Dashcam Hizmeti üç modülden oluşur:

  • Stream, kameralardan gelen akışları 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 aracılığıyla DashcamManager'e sunulur.

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ğlanır. Ancak her modül, bileşeni ilgili yapılandırma değerine ayarlanarak örtüşebilir.

Aşağıdakilerin OEM uygulama bileşeni adını ayarlayın:

  • IRecorderModule-recording_module
  • IStreamModule-streaming_module
  • ITriggerModule-trigger_module

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. Dashcam Manager API'yi IDashcamManager adresinde bulabilirsiniz. Gerekli izinlere sahip tüm uygulamalar Dashcam Yöneticisi'ni kullanabilir.

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 oturum için geçerlidir.

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.