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.
- Dostępna musi być wystarczająca ilość miejsca na dane na wewnętrznej pamięci urządzenia lub możliwość korzystania z wymiennej pamięci zewnętrznej
do nagrywania filmów.
Wymagania dotyczące oprogramowania:
- Nieobsługiwana pomoc. Więcej informacji znajdziesz w artykule [GA4] Aplikacje z nieopakowanych wersji.
- Uprawnienia Dashcam wymaga uprawnień systemowych.
Pobieranie kodu źródłowego
Dashcam jest częścią niespakowanych aplikacji AAOS. Aby sprawdzić kod bez pakietu, 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 Dashcam. 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 przypadku 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 uprzednio skonfigurowanym ustawieniu za pomocą szablonu 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 skompilowanego pakietu 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 nakładkowe.
Konfiguracja usługi
dashcam-service/res/values/config.xml
Ten plik zawiera konfiguracje usługi:
config_fileNazwa pliku konfiguracji reguły w/assetsallow_internal_storageZezwalanie na zapisywanie nagrań w pamięci wewnętrznejboot_startup_enabledUruchomienie usługi wideorejestratora po uruchomieniu urządzenianotifications_onPokaż powiadomienia po rozpoczęciu nagrywaniadefault_app_componentdomyślna aplikacja rejestratora jazdy, która ma dostęp do wszystkich nagrań i do wszystkich zdarzeń,recording_moduleNazwaKomponentu implementacjiIRecordingModulestreaming_moduleNazwaKomponentu implementacjiIStreamingModuletrigger_moduleNazwaKomponentu implementacjiITriggerModule
Konfiguracja reguły
Aby skonfigurować reguły nagrywania, utwórz kopię tych elementó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:
maxStorageUsagePercentMaksymalny procent dostępnego miejsca na dane, którego używa kamera samochodowa przed przycięciem nagrań.maxStorageUsageMegabytesMaksymalna ilość miejsca na dane w megabajtach, której używa kamera samochodowa przed przycięciem nagrań.maxAgeHoursBeforePruneMaksymalna 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.
prerollLengthMsDługość wstępu reklamowego, który ma być przechowywany wraz z każdym zdarzeniem.widthOpcjonalna szerokość bufora zwróconego przez kamerę.heightOpcjonalna 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 wstępem w jakości 1080p oraz identyfikator kamery Camera2:1 z 10-sekundowym wstępem i domyślną szerokością i wysokością.
Wyzwalacz
Konfiguracja reguły zawiera listę reguł zdefiniowanych przez te elementy:
nameUnikalna nazwa reguły.camerasIdentyfikatory kamer.sensorPropertyIDIdentyfikator czujnika poprzedzony prefiksem grupy czujników. Dostępne opcje prefiksów toVHALlubSENSOR_MANAGER.descriptionOpis reguły wyświetlany w interfejsie.recordingLengthMsCzas trwania nagrywania po zdarzeniu w milisekundach.sensorValueTypeTyp danych generowanych przez czujnik. Opcje toINT,INT_ARRAY,FLOAT,FLOAT_ARRAYiBOOLEAN, STRING.thresholdTypeJak ocenić wartość czujnika w porównaniu z wartościąthresholdValue. Opcje:AVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKiPEAK_HOLD.thresholdValueWartość porównana z wartością czujnika.thresholdExtraDodatkowa wartość wymagana w przypadku niektórych typów progów, takich jak zakres dlaAVERAGE.triggerCooldownOkres 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,IRecorderModuleiITriggerModuleoraz udostępniane interfejsowiDashcamManagerza pomocą interfejsuDashcamServiceAPI.
Moduły nakładek
Usługa Dashcam używa właściwości dashcam-service/res/values/config.xml, aby określić, gdzie znajdują się implementacje modułów. 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
IRecorderModuledorecording_module - Od
IStreamModuledostreaming_module - Od
ITriggerModuledotrigger_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 Dashcam Managera.
OverlayUI
Aplikację można dostosować za pomocą nakładek zasobów w czasie działania. 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 reguł na bieżącą sesję. Dodane przez Ciebie reguły 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 interfejsu 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. Sprawdź dostępne miejsce na dane i zarządzaj nagraniami. Zdecydowanie zalecamy korzystanie z pamięci zewnętrznej, ponieważ używanie pamięci wewnętrznej może spowodować przedwczesne zużycie pamięci.