Aplikacja Wideorejestrator została zaprojektowana do integracji z AAOS, aby zapewnić kierowcom możliwość nagrywania filmów, co zwiększa bezpieczeństwo. Ten przewodnik zawiera wymagania techniczne, instrukcje integracji i sprawdzone metody, które pomogą Ci wdrożyć tę funkcję.
Wymagania wstępne
Zanim przejdziesz dalej, upewnij się, że spełnione są te warunki wstępne:
SDK:
- Wymagany jest pakiet SDK w wersji 31 lub nowszej.
Sprzęt:
- Kamery EVS lub Camera2 dostępne dla AAOS.
- W przypadku nagrań wideo musi być dostępna wystarczająca ilość miejsca w pamięci wewnętrznej lub obsługa wymiennej pamięci zewnętrznej.
Wymagania dotyczące oprogramowania:
- Oddzielna pomoc. Więcej informacji znajdziesz w sekcji Aplikacje niezależne.
- Uprawnienia Wideorejestrator wymaga uprawnień systemowych.
Pobieranie kodu źródłowego
Wideorejestrator jest częścią aplikacji AAOS dostępnych osobno. Aby sprawdzić rozdzielony kod, zobacz Sprawdzanie kodu.
Przeglądaj kod źródłowy za pomocą wyszukiwarki kodu Androida.
Kod źródłowy jest dostępny w tych 3 modułach:
- Usługa wideorejestratora. Logika transmisji, nagrywania i wyzwalania.
- Menedżer wideorejestratora Łączy się z usługą Dashcam i udostępnia klientom stabilny interfejs API.
- Aplikacja wideorejestratora. Aplikacja wideorejestratora korzystająca z interfejsu Dashcam Manager API.
Tworzenie wideorejestratora
Do kompilacji wideorejestratora użyj Soong lub Gradle.
Soong
On Soong:
mma DashcamService DashcamManager-lib DashcamApp
Pliki APK znajdują się w lokalizacji 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 lokalizacji out/aaos-apps-gradle-build/.
Szczegółowe instrukcje tworzenia aplikacji Dashcam za pomocą Gradle znajdziesz w pliku README.
Uprawnienia
Usługa wideorejestratora i aplikacja wideorejestratora wymagają kilku uprawnień systemowych.
Najprostszym sposobem przyznania tych uprawnień jest uwzględnienie ich w gotowej konfiguracji 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 Make:
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 wideorejestratora przyznaj usłudze wideorejestratora uprawnienia Camera2 zgodnie z opisem w sekcji Aparat w AAOS.
Dodaj plik wstępnie przyznanych uprawnień do pliku Blueprint lub Make w taki sam sposób jak plik uprawnień.
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 utworzonego komponentu z obrazem systemu i Dodawanie listy dozwolonych.
Zainstalowane przez inny program
Plik uprawnień można też wgrać z boku. Użyj tej metody, gdy gotowa kamera samochodowa nie jest skonfigurowana.
Używając pliku uprawnień utworzonego wcześniej w sekcji gotowych komponentów, uruchom:
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 podobny sposób jak w przypadku etc/default-permissions/.
Konfigurowanie nakładek
Usługa kamery samochodowej ma konfiguracje, które można nakładać.
Konfiguracja usługi
dashcam-service/res/values/config.xml
Ten plik zawiera konfiguracje usługi:
config_fileNazwa pliku konfiguracji reguły w/assetsallow_internal_storageZezwalaj na zapisywanie nagrań w pamięci wewnętrznejboot_startup_enabledUruchamianie usługi wideorejestratora podczas włączania urządzenianotifications_onWyświetlaj powiadomienia po rozpoczęciu nagrywaniadefault_app_componentdomyślna aplikacja kamery samochodowej, która ma dostęp do nagrań i wyzwalaczy na całym świecie;recording_moduleComponentName ofIRecordingModuleimplementationstreaming_moduleComponentName ofIStreamingModuleimplementationtrigger_moduleComponentName ofITriggerModuleimplementation
Konfiguracja reguły
Aby skonfigurować reguły nagrywania, utwórz kopię:
dashcam-service/src/assets/config.xml
i dodać go do katalogu komponentów. Wskaż ten plik w elemencie config_file w pliku konfiguracji usługi.
Konfiguracja wyzwalacza składa się z pamięci, kamery i wyzwalacza:
Miejsce na dane
Konfiguracja miejsca na dane obejmuje te elementy:
maxStorageUsagePercentMaksymalny odsetek dostępnego miejsca na dane, który może wykorzystać kamera samochodowa przed usunięciem nagrań.maxStorageUsageMegabytesMaksymalna ilość miejsca na dane w megabajtach, jaką rejestrator samochodowy wykorzystuje przed usunięciem nagrań.maxAgeHoursBeforePruneMaksymalna liczba godzin przed usunięciem nagrania. Nagranie może zostać przycięte wcześniej, jeśli zostaną osiągnięte limity miejsca na dane.
Aparat
Konfiguracja kamery obejmuje te elementy:
Identyfikator kamery Identyfikator kamery z prefiksem kamery.
prerollLengthMsDługość reklamy przed filmem, która ma być przechowywana z każdym zdarzeniem.widthOpcjonalna szerokość bufora zwracanego przez aparat.heightOpcjonalna wysokość bufora zwracanego 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-sekundową reklamą przed filmem w rozdzielczości 1080p oraz identyfikator kamery Camera2:1 z 10-sekundową reklamą przed filmem o domyślnej szerokości i wysokości.
Wyzwalacz
Konfiguracja aktywatora składa się z listy aktywatorów zdefiniowanych przez te elementy:
nameUnikalna nazwa reguły.camerasidentyfikatory kamer.sensorPropertyIDIdentyfikator czujnika poprzedzony grupą czujników. Opcje prefiksu toVHALlubSENSOR_MANAGER.descriptionOpis aktywatora wyświetlany w interfejsie.recordingLengthMsCzas trwania po zdarzeniu, który ma być rejestrowany, w milisekundach.sensorValueTypeTyp danych generowanych przez czujnik. Dostępne opcje toINT,INT_ARRAY,FLOAT,FLOAT_ARRAYiBOOLEAN, STRING.thresholdTypeJak ocenić wartość czujnika na podstawiethresholdValue. Dostępne opcje toAVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAKiPEAK_HOLD.thresholdValueWartość porównywana z wartością czujnika.thresholdExtraW przypadku niektórych typów progów, np. zakresu, wymagana jest dodatkowa wartość 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 wyzwalacz, w którym TriggerModule monitoruje czujnik VHAL generujący wartości całkowite.
TriggerModule porównuje równość z wartością progową. Gdy warunek równości zostanie spełniony, wyzwalacz
zarejestruje się na kamerach 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"/>
W tym przykładzie pokazujemy wyzwalacz, w którym TriggerModule monitoruje czujnik VHAL generujący wartości zmiennoprzecinkowe.
TriggerModule porównuje średnią z czujnika z zakresu 10 próbek z wartością progową 20.0.
Zakres próbki jest ustawiony 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ń.
Trigger zawiera logikę wyzwalania nagrywania na podstawie danych z czujników. Interfejsy API modułów są zdefiniowane w odpowiednich interfejsach
IStreamModule,IRecorderModuleiITriggerModuleoraz udostępniane wDashcamManagerza pomocąDashcamServiceAPI.
Moduły nakładki
Usługa wideorejestratora używa właściwości dashcam-service/res/values/config.xml, aby określić, gdzie znaleźć implementacje modułów. Dla każdego modułu udostępniane są domyślne implementacje. 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
W czasie działania usługa Dashcam tworzy instancję nazwy komponentu ustawioną w config.xml dla każdego modułu.
Przewodnik dla deweloperów aplikacji
Wideorejestrator to gotowe do użytku produkcyjnego i konfigurowalne rozwiązanie do nagrywania jazdy. Rejestrator samochodowy
korzysta z interfejsów Dashcam Manager API do komunikacji z Dashcam service. Interfejs Dashcam
Manager 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 na zasoby w czasie działania. Więcej informacji znajdziesz w artykule Nakładki zasobów w czasie działania. Listę elementów, które można nakładać, znajdziesz w pliku overlayable.xml.
Rozszerzanie reguł
Wyzwalacze można przedłużyć na bieżącą sesję, wywołując funkcję DashcamManager#addTrigger(). Dodane wyzwalacze są zachowywane tylko w bieżącej sesji.
Automatyczne uruchamianie
Automatyczne uruchamianie nagrywania nie jest obsługiwane. Ręczne wyzwalanie można jednak rozpocząć onBoot wywołaniem funkcji DashcamManager.startRecording()
Sprawdzone metody
Miejsce na dane Zdecydowanie zalecamy korzystanie z zewnętrznej pamięci wymiennej.
Interfejs użytkownika Zaprojektuj interfejs aplikacji Wideorejestrator tak, aby był intuicyjny i przyjazny dla użytkownika, zgodnie z wytycznymi dotyczącymi projektowania w AAOS.
Optymalizacja skuteczności. Zoptymalizuj wydajność aplikacji, aby zminimalizować zużycie 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 systemie IVI AAOS.
Błędy pamięci. 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ć jej przedwczesne zużycie.