Aplikacja Dashcam została zaprojektowana z myślą o integracji z AAOS i zapewnia kierowcom możliwość nagrywania filmów w celu zwiększenia bezpieczeństwa. Ten przewodnik zawiera wymagania techniczne, kroki integracji i sprawdzone metody, które pomogą Ci w udanym wdrożeniu.
Wymagania wstępne
Zanim przejdziesz dalej, upewnij się, że są spełnione te warunki wstępne:
Pakiet SDK:
- Wymaga pakietu SDK w wersji 31 lub nowszej.
Sprzęt:
- Aparaty EVS lub Camera2 dostępne w Androida One.
- Do nagrywania filmów musi być dostępne wystarczające miejsce na urządzeniu z pamięcią wewnętrzną lub zewnętrzną
.
Wymagania dotyczące oprogramowania:
- Nieobsługiwana pomoc. Więcej informacji znajdziesz w artykule [GA4] Aplikacje z nieopakowanych danych.
- Uprawnienia Dashcam wymaga uprawnień systemowych.
Pobieranie kodu źródłowego
Dashcam jest częścią niespakowanych aplikacji AAOS. Aby sprawdzić kod niespakowany, zapoznaj się z artykułem Sprawdzanie kodu.
Przeglądaj kod źródłowy za pomocą Android Code Search.
Kod źródłowy jest dostępny w tych 3 modułach:
- Usługa wideorejestratora. strumieniowanie, nagrywanie i uruchamianie logiki;
- Menedżer Dashcam Łączy się z usługą Dashcam i udostępnia klientom stabilne interfejs API.
- Aplikacja Dashcam. Przykładowa aplikacja Dashcam korzystająca z Dashcam Manager API
Tworzenie wideorejestratora
Użyj Soong lub Gradle do skompilowania Dashcam.
Soong
W Soong:
mma DashcamService DashcamManager-lib DashcamApp
Pliki APK znajdują się w folderze out/target/product/[lunch-target]/system/priv-app/
Gradle
W Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
Pliki APK znajdują się w folderze out/aaos-apps-gradle-build/
Szczegółowe instrukcje kompilowania Dashcam za pomocą Gradle znajdziesz w pliku README
.
Uprawnienia
Usługa Dashcam i aplikacja Dashcam wymagają kilku uprawnień systemowych.
Najprostszym sposobem przyznania tych uprawnień jest uwzględnienie ich w gotowym szablonie za pomocą Blueprint lub Make.
W planie:
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,
}
W sekcji Marka:
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 \
Utwórz plik uprawnień o nazwie 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>
Dodaj uprawnienia z pliku manifestu do pliku uprawnień.
Przed użyciem Dashcam przyznaj Dashcam Service uprawnienia Camera2, jak pokazano na AAOS Camera.
Dodaj plik z uprawnieniami przyznanymi z góry do pliku Blueprint lub Make w taki sam sposób jak plik z uprawnieniami.
W 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>
W 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,
}
Więcej informacji znajdziesz w artykułach Integracja wstępnie utworzonej wersji w obrazie systemu i Dodawanie listy dozwolonych.
Instalowanie z nieoficjalnego źródła
Plik z uprawnieniami można też zainstalować ręcznie. Użyj tej metody, gdy wstępnie skonfigurowana kamera samochodowa nie jest skonfigurowana.
Użyj pliku uprawnień utworzonego wcześniej w sekcji z wstępnie skompilowanymi plikami:
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
Dodaj plik z uprawnieniami wstępnymi w sposób podobny do etc/default-permissions/
.
Konfigurowanie nakładek
Usługa Dashcam ma konfiguracje, które można nakładać.
Konfiguracja usługi
dashcam-service/res/values/config.xml
Ten plik zawiera konfiguracje usługi:
config_file
Nazwa pliku konfiguracji reguły w folderze/assets
allow_internal_storage
Zezwalanie na zapisywanie nagrań w pamięci wewnętrznejboot_startup_enabled
Uruchomienie usługi wideorejestratora po uruchomieniu urządzenianotifications_on
Pokaż powiadomienia po rozpoczęciu nagrywaniadefault_app_component
Domyślna aplikacja kamery samochodowej, która ma dostęp do globalnych nagrań i globalnych zdarzeńrecording_module
NazwaKomponentu implementacjiIRecordingModule
streaming_module
NazwaKomponentu implementacjiIStreamingModule
trigger_module
NazwaKomponentu implementacjiITriggerModule
Konfiguracja reguły
Aby skonfigurować reguły nagrywania, utwórz kopię tych plików:
dashcam-service/src/assets/config.xml
i dodać go do katalogu komponentów. Wskazuj na ten plik w elemencie config_file
w pliku konfiguracji usługi.
Konfiguracja reguły składa się z części dotyczących pamięci, kamery i reguły:
Miejsce na dane
Konfiguracja miejsca na dane zawiera te elementy:
maxStorageUsagePercent
Maksymalny procent dostępnego miejsca na dane, którego używa kamera samochodowa przed przycięciem nagrań.maxStorageUsageMegabytes
Maksymalna ilość miejsca na dane w megabajtach, której używa kamera samochodowa przed przycięciem nagrań.maxAgeHoursBeforePrune
Maksymalna liczba godzin, po której nagranie zostanie usunięte. Nagranie może zostać przycięte wcześniej, jeśli zostaną osiągnięte limity miejsca na dane.
Aparat
Konfiguracja kamery zawiera te elementy:
Identyfikator kamery. Identyfikator kamery z prefiksem kamery.
prerollLengthMs
Długość wstępu reklamowego, który ma być przechowywany wraz z każdym zdarzeniem.width
Opcjonalna szerokość bufora zwróconego przez kamerę.height
Opcjonalna wysokość bufora zwróconego przez kamerę.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
Ten przykład pokazuje identyfikator kamery EVS:1 z 10-sekundowym prerollem w rozdzielczości 1080p oraz identyfikator kamery Camera2:1 z 10-sekundowym prerollem i domyślną szerokością i wysokością.
Wyzwalacz
Konfiguracja reguły zawiera listę reguł zdefiniowanych przez te elementy:
name
Unikalna nazwa reguły.cameras
Identyfikatory kamer.sensorPropertyID
Identyfikator czujnika poprzedzony prefiksem grupy czujników. Dostępne opcje prefiksów toVHAL
lubSENSOR_MANAGER
.description
Opis reguły wyświetlany w interfejsie.recordingLengthMs
Czas trwania nagrywania po zdarzeniu w milisekundach.sensorValueType
Typ danych generowanych przez czujnik. Opcje toINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
iBOOLEAN, STRING
.thresholdType
Jak ocenić wartość czujnika w porównaniu z wartościąthresholdValue
. Opcje:AVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
iPEAK_HOLD
.thresholdValue
Wartość porównana z wartością czujnika.thresholdExtra
Dodatkowa wartość wymagana w przypadku niektórych typów progów, takich jak zakres dlaAVERAGE
.triggerCooldown
Okres oczekiwania w milisekundach przed wywołaniem kolejnego zdarzenia tego typu.
<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>
Ten przykład pokazuje regułę, w której TriggerModule
monitoruje czujnik VHAL z wartościami całkowitymi.
TriggerModule
sprawdza, czy wartość jest równa wartości progowej. Gdy warunek równości jest spełniony, wyzwalacz rejestruje dane z kamer EVS 1 i 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"/>
Ten przykład pokazuje regułę, w której TriggerModule
monitoruje czujnik VHAL z wartościami zmiennoprzecinkowymi.
TriggerModule
porównuje średnią wartość czujnika w zakresie 10
próbek z wartością progową 20.0
.
Zakres próbkowania jest ustawiany w thresholdExtra
. Nowe zdarzenie może być wywoływane tylko co 2000
ms zgodnie z ustawieniem w parametrze triggerCooldown
.
Moduły
Usługa Dashcam składa się z 3 modułów:
Stream zawiera logikę obsługi strumieni z kamer.
Recording zawiera logikę obsługi nagrań.
Wyzwalacz zawiera logikę wyzwalania nagrywania na podstawie danych z czujników. Interfejsy API modułów są definiowane w odpowiednich interfejsach:
IStreamModule
,IRecorderModule
iITriggerModule
oraz udostępniane interfejsowiDashcamManager
za pomocą interfejsuDashcamServiceAPI
.
Moduły nakładek
Usługa Dashcam używa właściwości dashcam-service/res/values/config.xml
do określenia, gdzie znajdują się implementacje modułu. Dla każdego modułu dostępne są implementacje domyślne. Każdy moduł można jednak nałożyć, ustawiając jego komponent w odpowiedniej wartości konfiguracji.
Ustaw nazwę komponentu implementacji OEM:
- Od
IRecorderModule
dorecording_module
- Od
IStreamModule
dostreaming_module
- Od
ITriggerModule
dotrigger_module
Podczas działania usługa Dashcam tworzy instancję nazwy komponentu ustawionej w config.xml
dla każdego modułu.
Przewodnik dla deweloperów aplikacji
Dashcam to gotowe do wdrożenia i możliwe do dostosowania rozwiązanie do rejestrowania obrazu z przodu pojazdu. Dashcam do komunikacji z Dashcam service
używa interfejsów Dashcam Manager API. Interfejs DashcamManager API znajdziesz na stronie IDashcamManager
. Każda aplikacja z wymaganymi uprawnieniami może korzystać z Menedżera wideorejestratora.
OverlayUI
Aplikację można dostosować za pomocą nakładek zasobów w czasie wykonywania. Więcej informacji znajdziesz w artykule Nakładki zasobów w czasie wykonywania. Aby zobaczyć listę elementów, które można nakładać, otwórz plik overlayable.xml.
Rozszerzanie reguł
Korzystając z funkcji DashcamManager#addTrigger()
, możesz rozszerzyć działanie wyzwalaczy na bieżącą sesję. Dodane przez Ciebie wyzwalacze będą obowiązywać tylko w bieżącej sesji.
Automatyczne uruchamianie
Nagrywanie automatyczne nie jest obsługiwane. Można jednak uruchomić onBoot
za pomocą wywołania DashcamManager.startRecording()
Sprawdzone metody
Miejsce na dane Zdecydowanie zalecamy użycie zewnętrznego wymiennego urządzenia pamięci masowej.
Interfejs użytkownika. Zaprojektuj interfejs aplikacji Dashcam tak, aby był intuicyjny i przyjazny dla użytkownika, a jednocześnie zgodny ze wskazówkami dotyczącymi AAOS.
Optymalizacja skuteczności. Zoptymalizuj wydajność aplikacji, aby zminimalizować wykorzystanie zasobów i zapewnić płynne działanie w AAOS.
Rozwiązywanie problemów
Problemy z połączeniem kamery EVS lub Camera2 muszą być obsługiwane i dostępne w AAOS IVI.
Błędy miejsca na dane. Sprawdzanie dostępnego miejsca na dane i zarządzanie nagraniami. Zdecydowanie zalecamy korzystanie z pamięci zewnętrznej, ponieważ używanie pamięci wewnętrznej może spowodować przedwczesne zużycie pamięci.