אפליקציית מצלמת הדשבורד מיועדת לשילוב עם AAOS, ומספקת לנהגים יכולות צילום וידאו לשיפור הבטיחות והאבטחה. במדריך הזה מפורטות הדרישות הטכניות, שלבי השילוב והשיטות המומלצות להטמעה מוצלחת.
דרישות מוקדמות
לפני שממשיכים, צריך לוודא שהתנאים המוקדמים הבאים מתקיימים:
SDK:
- נדרשת גרסת SDK 31 ואילך.
חומרה:
- מצלמות EVS או Camera2 שזמינות ל-AAOS.
- צריך להיות מספיק מקום אחסון פנימי או תמיכה באחסון חיצוני נשלף
כדי לצלם סרטונים.
דרישות התוכנה:
- תמיכה ללא חבילת שירות מידע נוסף זמין במאמר אפליקציות לא בחבילה.
- הרשאות כדי להשתמש במצלמת הרכב, נדרשות הרשאות מערכת.
קבלת קוד המקור
אפשר למצוא את קוד המקור ב-Android Code Search בכתובת:
קוד המקור זמין בשלושת המודולים הבאים:
- שירות מצלמת הדשבורד לוגיקה של סטרימינג, הקלטה והפעלה.
- מנהל מצלמת הדשבורד מתחבר לשירות Dashcam ומציג ללקוחות ממשק API יציב
- אפליקציית Dashcam: הפניה לאפליקציית Dashcam באמצעות Dashcam Manager API
פיתוח מצלמת הדשבורד
משתמשים ב-Soong או ב-Gradle כדי ליצור את Dashcam.
סונג
לפני שמבצעים פיתוח מ-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/
הוראות מפורטות ליצירת build של Dashcam באמצעות Gradle מפורטות בקובץ README
.
הרשאות
נדרשות כמה הרשאות מערכת לשירות של מצלמת הרכב ולאפליקציה של מצלמת הרכב.
הדרך הפשוטה ביותר להעניק את ההרשאות האלה היא לכלול אותן בהגדרה מוכנה מראש באמצעות Blueprint או Make.
ב-Blueprint:
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>
מוסיפים את ההרשאות מהמניפסט לקובץ ההרשאות.
מידע נוסף זמין במאמר מובנה מראש בתמונת מערכת.
התקנה ממקור לא ידוע
אפשר גם להעביר את קובץ ההרשאות דרך ה-Sideload. משתמשים בשיטה הזו כשמצלמת הרכב המובנית לא מוגדרת.
באמצעות קובץ ההרשאות שנוצר בקטע הקודם בנושא חבילות מוכנות מראש, מריצים את הפקודה:
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
שם הספרייה שבה יישמרו ההקלטות. ברירת המחדל היא מצלמת רכבmax_storage_mb
כמה נפח אחסון לאפשר למצלמת הרכב להשתמש בוmax_age_days
למשך כמה זמן לשמור קובץ לפני גיזוםboot_startup_enabled
הפעלת שירות מצלמת הדשבורד בזמן האתחול של המכשירnotifications_on
הצגת התראות כשההקלטה מתחילהnative_recorder
שימוש בממשקי NDK API, ברירת המחדל היא ממשקי Java APInative_renderer
שימוש בממשקי NDK API, ברירת המחדל היא ממשקי Java APIdefault_app_component
אפליקציית ברירת המחדל למצלמת הרכב, לאפליקציה הזו יש גישה גלובלית להקלטות וגישה גלובלית להפעלהrecording_module
ComponentName של הטמעת IRecordingModulestreaming_module
ComponentName של הטמעת IRecordingModuletrigger_module
ComponentName של הטמעת IRecordingModule
הגדרת טריגר
כדי להפעיל את ההגדרה, מריצים את הפקודה:
dashcam-service/src/assets/config.xml
הקובץ הזה מכיל הגדרות להפעלת טריגרים להקלטה. הגדרת הטריגר מורכבת משני חלקים:
מזהה הווידאו המקדים. המזהה של המצלמה, EVS או Camera2, בהתאם למה שנתמך.
prerollLengthMs
האורך של הקליפ של מודעה מוקדמת שיאוחסן עם כל אירוע.
<Preroll>
<Camera
ID="0"
prerollLengthMs="10000" />
</Preroll>
בדוגמה הזו מוצג מזהה המצלמה 0 עם מודעה מוקדמת של 10 שניות.
name
שם הטריגר הייחודיcamera
מזהה המצלמה, EVS או Camera2, בהתאם למה שנתמךsensorPropertyID
מזהה החיישןdescription
תיאור הטריגר שמוצג בממשק המשתמש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 שמייצר ערכים מסוג float, שבהם אנחנו מעריכים את הממוצע על פני טווח של דגימות בהשוואה לערך הסף. טווח הדגימה מוגדר ב-thresholdExtra
מודולים
שירות מצלמת הרכב מורכב משלושה מודולים:
Stream מכיל את הלוגיקה לטיפול בסטרימינג ממצלמות.
הקלטה מכילה את הלוגיקה לטיפול בהקלטות.
טריגר מכיל את הלוגיקה להפעלת הקלטה מנתוני חיישנים. ממשקי ה-API של המודולים מוגדרים בממשקים המתאימים שלהם,
IStreamModule
, IRecorderModule
ו-ITriggerModule
, וחשופים ל-DashcamManager דרךDashcamServiceAPI
.
מודולים של שכבת-על
שירות Dashcam משתמש ב-dashcam-service/res/values/config.xml
כדי לקבוע איפה נמצאות הטמעות המודול. אנחנו מספקים הטמעות ברירת מחדל לכל מודול. עם זאת, אפשר להציג שכבה של כל מודול על ידי הגדרת הרכיב שלו בערך התצורה המתאים.
הגדרת השם של רכיב ההטמעה של OEM מ-
IRecorderModule
ל-recording_module
מגדירים את שם הרכיב של הטמעת ה-OEM של
IStreamModule
למודול הסטרימינג.הגדרת השם של רכיב ההטמעה של OEM מ-
ITriggerModule
ל-trigger_module
בזמן הריצה, שירות Dashcam יוצר מופע של שם הרכיב שמוגדר ב-
config.xml
לכל מודול.
מדריך למפתחי אפליקציות
Dashcam הוא פתרון מצלמת דשבורד וגם בהתאמה אישית, שעומד בדרישות של סביבות ייצור. Dashcam משתמש בממשקי ה-API של Dashcam Manager כדי לתקשר עם Dashcam service
. אפשר למצוא את Dashcam Manager API בכתובת IDashcamManager
. כל אפליקציה עם ההרשאות הנדרשות יכולה להשתמש ב-Dashcam Manager.
הרשאות
יש תמיכה ב-Camera2 וב-EVS.
מובנה
הדרך הקלה ביותר להעניק את ההרשאות האלה היא לכלול אותן בהגדרה המוגדרת מראש באמצעות Blueprint או Make.
OverlayUI
אפשר להתאים אישית את האפליקציה באמצעות שכבות-על של משאבי זמן ריצה. למידע נוסף, ראו שכבות-על של משאבים בסביבת זמן ריצה. לרשימת הרכיבים שאפשר להוסיף שכבת-על להם, אפשר לעיין בקובץ overlayable.xml.
הרחבת הטריגרים
אפשר להאריך את הטריגרים לסשן הנוכחי באמצעות קריאה ל-DashcamManager.addTrigger()
. טריגרים שנוספו נשארים בתוקף רק בסשן הנוכחי.
הפעלה אוטומטית
אין תמיכה בהפעלה אוטומטית של ההקלטה. עם זאת, אפשר להפעיל טריגר ידני onBoot
באמצעות קריאה ל-DashcamManager.startRecording()
שיטות מומלצות
אחסון מומלץ מאוד להשתמש באחסון חיצוני נשלף.
חוויית המשתמש תכנון ממשק המשתמש של אפליקציית Dashcam כך שיהיה אינטואיטיבי ונוח למשתמש, בהתאם להנחיות העיצוב של AAOS.
אופטימיזציה של הביצועים לבצע אופטימיזציה של הביצועים של האפליקציה כדי לצמצם את השימוש במשאבים ולהבטיח תפעול חלק ב-AAOS.
פתרון בעיות
בעיות בקישוריות של המצלמה צריכה להיות תמיכה ב-EVS או ב-Camera2 והם צריכים להיות זמינים ב-AAOS IVI.
שגיאות אחסון איך בודקים את נפח האחסון הזמין ומנהלים את ההקלטות. מומלץ מאוד להשתמש באחסון חיצוני, כי שימוש באחסון פנימי עלול לגרום לבלאי מוקדם של האחסון.