Aplikacja wideorejestratora jest przeznaczona do integracji z AAOS, aby zapewnić kierowcom możliwość nagrywania filmów w celu zwiększenia bezpieczeństwa. Ten przewodnik zawiera wymagania techniczne, instrukcje integracji i sprawdzone metody, które pomogą Ci w prawidłowym wdrożeniu.
Wymagania wstępne
Zanim przejdziesz dalej, upewnij się, że spełnione są te warunki wstępne:
Pakiet SDK:
- Wymagany jest pakiet SDK w wersji 31 lub nowszej.
Sprzęt:
- Kamery EVS lub Camera2 dostępne w AAOS.
- Wystarczająca ilość miejsca w pamięci wewnętrznej lub obsługa wymiennej pamięci zewnętrznej
musi być dostępna do nagrywania filmów.
Wymagania związane z oprogramowaniem:
- Obsługa aplikacji niezależnych. Więcej informacji znajdziesz w artykule Aplikacje niezależne.
- Uprawnienia. Wideorejestrator wymaga uprawnień systemowych.
Pobieranie kodu źródłowego
Wideorejestrator jest częścią aplikacji niezależnych AAOS. Aby sprawdzić kod niezależny, przeczytaj artykuł 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 przesyłania strumieniowego, nagrywania i wyzwalania.
- Menedżer wideorejestratora. Łączy się z usługą wideorejestratora i udostępnia klientom stabilny interfejs API.
- Aplikacja wideorejestratora. Aplikacja wideorejestratora, która korzysta z interfejsu API menedżera wideorejestratora.
Kompilowanie wideorejestratora
Do kompilowania wideorejestratora użyj Soong lub Gradle.
Soong
W Soong:
mma DashcamService DashcamManager-lib DashcamApp
Pliki APK znajdują się w 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 out/aaos-apps-gradle-build/
Szczegółowe instrukcje kompilowania wideorejestratora za pomocą Gradle znajdziesz w pliku README.
Uprawnienia
Usługa wideorejestratora i aplikacja wideorejestratora wymagają kilku uprawnień systemowych.
Najprostszym sposobem na przyznanie tych uprawnień jest uwzględnienie ich w preinstalowanej konfiguracji za pomocą Blueprint lub Make.
W Blueprint:
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 manifestu do pliku uprawnień.
Zanim zaczniesz korzystać z wideorejestratora, przyznaj usłudze wideorejestratora uprawnienia Camera2, jak pokazano w AAOS Camera.
Dodaj plik z przyznanymi uprawnieniami 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 Integrowanie preinstalowanej aplikacji z obrazem systemu i Dodawanie listy dozwolonych.
Zainstalowane przez inny program
Plik uprawnień można też zainstalować przez inny program. Użyj tej metody, gdy preinstalowany wideorejestrator nie jest skonfigurowany.
Używając pliku uprawnień utworzonego wcześniej w sekcji preinstalowanych aplikacji, 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 przyznanymi uprawnieniami w podobny sposób jak etc/default-permissions/.
Konfigurowanie nakładek
Usługa wideorejestratora ma konfigurowalne nakładki.
Konfiguracja usługi
dashcam-service/res/values/config.xml
Ten plik zawiera konfiguracje usługi:
config_fileNazwa pliku konfiguracji aktywatora 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 wideorejestratora, która ma globalny dostęp do nagrań i globalny dostęp do aktywatorówrecording_moduleComponentName implementacjiIRecordingModulestreaming_moduleComponentName implementacjiIStreamingModuletrigger_moduleComponentName implementacjiITriggerModule
Konfiguracja aktywatora
Aby skonfigurować aktywatory nagrywania, utwórz kopię:
dashcam-service/src/assets/config.xml
i dodaj ją do katalogu zasobów. Wskaż ten plik w elemencie config_file w pliku konfiguracji usługi.
Konfiguracja aktywatora składa się z części dotyczących miejsca na dane, aparatu i aktywatora:
Miejsce na dane
Konfiguracja miejsca na dane ma te elementy:
maxStorageUsagePercentMaksymalny procent dostępnego miejsca na dane, które wideorejestrator może wykorzystać przed usunięciem nagrań.maxStorageUsageMegabytesMaksymalna ilość miejsca na dane w megabajtach, które wideorejestrator może wykorzystać przed usunięciem nagrań.maxAgeHoursBeforePruneMaksymalna liczba godzin przed usunięciem nagrania. Nagranie można usunąć wcześniej, jeśli zostaną osiągnięte limity miejsca na dane.
Aparat
Konfiguracja aparatu ma te elementy:
Identyfikator aparatu. Identyfikator aparatu z prefiksem aparatu.
prerollLengthMsDługość prerolla, który ma być przechowywany z każdym zdarzeniem.widthOpcjonalna szerokość bufora zwracanego przez aparat.heightOpcjonalna wysokość bufora zwracanego przez aparat.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
Ten przykład pokazuje identyfikator aparatu EVS:1 z 10-sekundowym prerollem w rozdzielczości 1080p oraz identyfikator aparatu Camera2:1 z 10-sekundowym prerollem i domyślną szerokością i wysokością.
Wyzwalacz
Konfiguracja aktywatora składa się z listy aktywatorów zdefiniowanych przez te elementy:
nameUnikalna nazwa aktywatora.camerasIdentyfikatory aparatów.sensorPropertyIDIdentyfikator czujnika z prefiksem grupy czujników. Opcje prefiksu toVHALlubSENSOR_MANAGER.descriptionOpis aktywatora, który jest wyświetlany w interfejsie.recordingLengthMsCzas po zdarzeniu, przez który ma być nagrywany film, w milisekundach.sensorValueTypeTyp danych generowanych przez czujnik. Opcje toINT,INT_ARRAY,FLOAT,FLOAT_ARRAYorazBOOLEAN, STRING.thresholdTypeSposób porównywania wartości czujnika zthresholdValue. Opcje toAVERAGE,BOOLEAN,EQUALS,LEAP,LEAP_AVERAGE,LEAP_OVER,PEAK, iPEAK_HOLD.thresholdValueWartość porównywana z wartością czujnika.thresholdExtraDodatkowa wartość wymagana w przypadku niektórych typów progów, np. zakresu dlaAVERAGE.triggerCooldownCzas w milisekundach, który musi upłynąć, zanim zostanie wywołane kolejne zdarzenie 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 aktywator, 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, aktywator nagrywa 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"/>
Ten przykład pokazuje aktywator, w którym TriggerModule monitoruje czujnik VHAL generujący wartości zmiennoprzecinkowe.
TriggerModule porównuje średnią wartość czujnika w zakresie 10 próbek z wartością progową 20.0.
Zakres próbek jest ustawiony w thresholdExtra. Nowe zdarzenie można wywołać tylko co 2000 milisekund, zgodnie z ustawieniem triggerCooldown.
Moduły
Usługa wideorejestratora składa się z 3 modułów:
Strumień zawiera logikę obsługi strumieni z kamer.
Nagrywanie zawiera logikę obsługi nagrań.
Aktywator zawiera logikę wyzwalania nagrywania na podstawie danych z czujnika. Interfejsy API modułów są zdefiniowane w odpowiednich interfejsach:
IStreamModule,IRecorderModuleiITriggerModule. Są one udostępnianeDashcamManagerza pomocąDashcamServiceAPI.
Moduły nakładek
Usługa wideorejestratora używa pliku dashcam-service/res/values/config.xml, aby określić, gdzie znaleźć implementacje modułów. Dla każdego modułu są dostępne domyślne implementacje. Każdy moduł można jednak zastąpić, ustawiając jego komponent w odpowiedniej wartości konfiguracji.
Ustaw nazwę komponentu implementacji OEM:
IRecorderModulenarecording_moduleIStreamModulenastreaming_moduleITriggerModulenatrigger_module
Podczas działania usługa wideorejestratora tworzy instancję nazwy komponentu ustawionej w config.xml dla każdego modułu.
Przewodnik dla deweloperów aplikacji
Wideorejestrator to gotowe do użytku i konfigurowalne rozwiązanie. Wideorejestrator
używa interfejsów API menedżera wideorejestratora do komunikacji z Dashcam service. Interfejs API menedżera wideorejestratora znajdziesz w 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 działania. Więcej informacji znajdziesz w artykule Nakładki zasobów w czasie działania. Listę elementów, które można zastąpić, znajdziesz w pliku overlayable.xml.
Rozszerzanie aktywatorów
Aktywatory można rozszerzyć na potrzeby bieżącej sesji, wywołując DashcamManager#addTrigger(). Dodane aktywatory są dostępne tylko w bieżącej sesji.
Automatyczne uruchamianie
Automatyczne uruchamianie nagrywania nie jest obsługiwane. Możesz jednak uruchomić aktywator ręcznie onBoot, wywołując DashcamManager.startRecording().
Sprawdzone metody
Miejsce na dane. Zdecydowanie zalecamy używanie zewnętrznej pamięci wymiennej.
Wygoda użytkowników. Zaprojektuj interfejs aplikacji wideorejestratora tak, aby był intuicyjny i przyjazny dla użytkownika, zgodnie z wytycznymi dotyczącymi projektowania AAOS.
Optymalizacja skuteczności. Zoptymalizuj skuteczność aplikacji, aby zminimalizować zużycie zasobów i zapewnić płynne działanie w AAOS.
Rozwiązywanie problemów
Problemy z łącznością z aparatem. W AAOS IVI musi być obsługiwana i dostępna kamera EVS lub Camera2.
Błędy miejsca na dane. Sprawdź dostępne miejsce na dane i zarządzaj nagraniami. Zdecydowanie zalecamy używanie pamięci zewnętrznej, ponieważ korzystanie z pamięci wewnętrznej może spowodować jej przedwczesne zużycie.