대시캠 앱은 AAOS와 통합되도록 설계되어 운전자에게 향상된 안전과 보안을 위한 동영상 녹화 기능을 제공합니다. 이 가이드에서는 성공적인 구현을 위한 기술 요구사항, 통합 단계, 권장사항을 간략히 설명합니다.
기본 요건
계속하기 전에 다음 기본 요건을 충족하는지 확인하세요.
SDK:
- SDK 31 이상이 필요합니다.
하드웨어:
- AAOS에서 사용할 수 있는 EVS 또는 Camera2 카메라
- 동영상 녹화를 위해 충분한 내부 저장공간 또는 탈착식 외부 저장소 지원이
있어야 합니다.
소프트웨어 요구사항:
- 번들 해제된 지원 자세한 내용은 번들 해제된 앱을 참고하세요.
- 권한. 대시캠에는 시스템 권한이 필요합니다.
소스 코드 가져오기
Android 코드 검색에서 소스 코드를 찾으려면 다음 위치로 이동하세요.
소스 코드는 다음 세 모듈에 제공됩니다.
- Dashcam 서비스. 스트리밍, 녹음, 트리거 로직
- Dashcam Manager Dashcam 서비스에 연결하고 클라이언트에 안정적인 API를 노출합니다.
- Dashcam 앱. Dashcam Manager API를 사용하는 Dashcam 애플리케이션 참조
대시캠 빌드
Soong 또는 Gradle을 사용하여 Dashcam을 빌드합니다.
Soong
Soong에서 빌드하기 전에 .cxx
디렉터리를 정리해야 합니다.
Soong:
mma DashcamService DashcamManager-lib DashcamApp
APK는 out/target/product/[lunch-target]/system/priv-app/
에 있습니다.
Gradle
Gradle:
./gradlew :dashcam-app:assemble
./gradlew :dashcam-manager:assemble
./gradlew :dashcam-service:assemble
APK는 out/aaos-apps-gradle-build/
에 있습니다.
Gradle을 사용하여 Dashcam을 빌드하는 방법에 관한 자세한 안내는 README
파일에 나와 있습니다.
권한
대시캠 서비스와 대시캠 앱에는 여러 시스템 권한이 필요합니다.
이러한 권한을 부여하는 가장 간단한 방법은 Blueprint 또는 Make를 사용하여 사전 빌드된 설정에 권한을 포함하는 것입니다.
청사진에서:
Android.bp
android_app_import {
name: "DashcamApp-prebuilt",
apk: "DashcamApp.apk",
privileged: true,
certificate: "platform",
required: ["allowed_privapp_com.android.car.dashcam"],
}
Make:
dashcam.mk
PRODUCT_PACKAGES += \
DashcamApp
PRODUCT_COPY_FILES :=\
vendor/[path-to-vendor-prebuilts]/apps/CarCatApp/allowed_privapp_com.android.car.dashcam:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/com.android.car.dashcam.xml \
allowed_privapp_com.android.car.dashcam.xml
라는 권한 파일을 만듭니다.
<permissions>
<privapp-permissions package="com.android.car.dashcam">
<permission name="" />
</privapp-permissions>
<privapp-permissions package="com.android.car.dashcam.app">
<permission name="" />
</privapp-permissions>
</permissions>
매니페스트의 권한을 권한 파일에 추가합니다.
자세한 내용은 시스템 이미지에 사전 빌드를 참고하세요.
사이드로드
권한 파일은 사이드로드할 수도 있습니다. 사전 빌드된 대시카메라가 구성되지 않은 경우 이 메서드를 사용합니다.
이전에 사전 빌드 섹션에서 만든 권한 파일을 사용하여 다음을 실행합니다.
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
오버레이 구성
대시캠 서비스에 오버레이 가능한 구성이 있습니다.
서비스 구성
dashcam-service/res/values/config.xml
이 파일에는 서비스의 구성이 포함되어 있습니다.
allow_internal_storage
내부 저장소에 녹음 허용save_location
녹음 파일을 저장할 디렉터리 이름입니다. 기본값은 dashcam입니다.max_storage_mb
대시캠에 사용할 수 있는 스토리지 양max_age_days
정리하기 전에 파일을 보관하는 기간boot_startup_enabled
기기 부팅 시 대시캠 서비스 시작notifications_on
녹음 시작 시 알림 표시native_recorder
NDK API 사용, 기본값은 Java API임native_renderer
NDK API 사용, 기본값은 Java API임default_app_component
기본 대시카메라 애플리케이션으로, 이 애플리케이션에는 전 세계 녹화 액세스 권한과 전 세계 트리거 액세스 권한이 있습니다.recording_module
IRecordingModule 구현의 ComponentNamestreaming_module
IRecordingModule 구현의 ComponentNametrigger_module
IRecordingModule 구현의 ComponentName
트리거 구성
구성을 트리거하려면 다음을 실행합니다.
dashcam-service/src/assets/config.xml
이 파일에는 녹화 트리거의 구성이 포함되어 있습니다. 트리거 구성은 다음 두 부분으로 구성됩니다.
프리롤 ID. 지원되는 항목에 따라 EVS 또는 Camera2 중 하나인 카메라의 ID입니다.
prerollLengthMs
각 이벤트와 함께 저장할 프리롤의 길이입니다.
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
이 예에서는 10초의 프리롤이 있는 카메라 ID 0을 보여줍니다.
name
고유한 트리거 이름camera
지원되는 항목에 따라 EVS 또는 Camera2 중 하나인 카메라 ID입니다.sensorPropertyID
센서의 ID입니다.description
UI에 표시되는 트리거에 대한 설명recordingLengthMs
이벤트 후 기록할 시간(밀리초)입니다.sensorType
센서 유형입니다. 옵션은VHAL
또는SENSOR_MANAGER
입니다.sensorValueType
센서에서 생성된 데이터 유형입니다. 옵션은INT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
,BOOLEAN, STRING
입니다.thresholdType
센서 값을 평가하는 방법 옵션은AVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
,PEAK_HOLD
입니다.thresholdValue
센서 값을 임곗값 유형과 비교할 값입니다.thresholdExtra
일부 임곗값 유형(예:AVERAGE
의 범위)에 필요한 추가 값triggerCooldown
이 유형의 다른 이벤트를 실행하기 전에 대기하는 시간(밀리초)입니다.
<EventTriggers>
<EventTrigger
name="AEB"
camera="1 2"
sensorPropertyID="289411073"
description="Automatic Emergency Braking"
recordingLengthMs="20000"
sensorType="VHAL"
sensorValueType="INT"
thresholdType="EQUALS"
thresholdValue="2"
triggerCooldown="5000"/>
</EventTriggers>
이 예에서는 동등성을 임곗값과 비교하는 정수 값을 생성하는 VHAL 센서를 보여줍니다. 등식 조건이 충족되면 트리거가 카메라 1과 2에 녹화합니다.
<EventTrigger
name="SPEED"
camera="1 2 3 4"
sensorPropertyID="291504648"
description="Over speed"
recordingLengthMs="10000"
sensorType="VHAL"
sensorValueType="FLOAT"
thresholdType="AVERAGE"
thresholdValue="20.0"
thresholdExtra="1000"
triggerCooldown="2000"/>
이 예에서는 임곗값을 기준으로 샘플 범위의 평균을 평가하는 부동 소수점 값을 생성하는 VHAL 센서를 보여줍니다. 샘플 범위는 thresholdExtra
에 설정됩니다.
모듈
Dashcam 서비스는 다음 세 가지 모듈로 구성됩니다.
스트림에는 카메라의 스트림을 처리하는 로직이 포함되어 있습니다.
Recording에는 녹화 파일을 처리하는 로직이 포함되어 있습니다.
트리거에는 센서 데이터에서 녹화를 트리거하는 로직이 포함되어 있습니다. 모듈 API는 상응하는 인터페이스인
IStreamModule
,IRecorderModule
,ITriggerModule
에 정의되고DashcamServiceAPI
를 통해 DashcamManager에 노출됩니다.
오버레이 모듈
Dashcam 서비스는 dashcam-service/res/values/config.xml
를 사용하여 모듈 구현을 찾을 위치를 결정합니다. 각 모듈에 기본 구현이 제공됩니다. 그러나 각 모듈은 상응하는 구성 값에서 구성요소를 설정하여 오버레이할 수 있습니다.
OEM 구현 구성요소 이름
IRecorderModule
를recording_module
로 설정합니다.IStreamModule
의 OEM 구현 구성요소 이름을 스트리밍 모듈로 설정합니다.OEM 구현 구성요소 이름
ITriggerModule
를trigger_module
로 설정합니다.런타임 시 Dashcam 서비스는 각 모듈의
config.xml
에 설정된 구성요소 이름을 인스턴스화합니다.
앱 개발자 가이드
Dashcam은 프로덕션에 즉시 사용 가능한 및 맞춤설정이 가능한 대시캠 솔루션입니다. Dashcam은 Dashcam Manager API를 사용하여 Dashcam service
와 통신합니다. Dashcam Manager API는 IDashcamManager
에서 확인할 수 있습니다. 필요한 권한이 있는 모든 앱은 Dashcam Manager를 사용할 수 있습니다.
권한
Camera2 및 EVS가 지원됩니다.
사전 빌드
이러한 권한을 부여하는 가장 쉬운 방법은 Blueprint 또는 Make를 사용하여 사전 빌드된 설정에 권한을 포함하는 것입니다.
OverlayUI
런타임 리소스 오버레이로 앱을 맞춤설정할 수 있습니다. 자세한 내용은 런타임 리소스 오버레이를 참고하세요. 오버레이 가능한 요소 목록을 보려면 overlayable.xml을 참고하세요.
트리거 연장
DashcamManager.addTrigger()
를 호출하여 현재 세션의 트리거를 연장할 수 있습니다. 추가된 트리거는 현재 세션에만 유지됩니다.
자동 시작
녹화 자동 시작은 지원되지 않습니다. 그러나 수동 트리거는 DashcamManager.startRecording()
호출을 통해 onBoot
시작할 수 있습니다.
권장사항
저장용량. 외부 이동식 저장소를 사용하는 것이 좋습니다.
사용자 환경 AAOS 디자인 가이드라인을 준수하여 직관적이고 사용자 친화적으로 대시캠 앱의 UI를 디자인합니다.
성능 최적화 앱 성능을 최적화하여 리소스 사용을 최소화하고 AAOS에서 원활하게 작동하도록 합니다.
문제 해결
카메라 연결 문제 EVS 또는 Camera2가 AAOS IVI에서 지원되고 사용 가능해야 합니다.
저장소 오류. 사용 가능한 저장용량을 확인하고 녹화 파일을 관리합니다. 내부 저장소를 사용하면 저장소가 조기에 마모될 수 있으므로 외부 저장소를 사용하는 것이 좋습니다.