אפליקציית מצלמת הדשבורד מיועדת לשילוב עם AAOS, ומספקת לנהגים יכולות צילום וידאו לשיפור הבטיחות והאבטחה. במדריך הזה מפורטות הדרישות הטכניות, שלבי השילוב והשיטות המומלצות להטמעה מוצלחת.
דרישות מוקדמות
לפני שממשיכים, צריך לוודא שהתנאים המוקדמים הבאים מתקיימים:
SDK:
- נדרשת גרסת SDK מגרסה 31 ואילך.
חומרה:
- מצלמות EVS או Camera2 שזמינות ל-AAOS.
- צריך להיות מספיק מקום אחסון פנימי או תמיכה באחסון חיצוני נשלף
לצורך הקלטת סרטונים.
דרישות התוכנה:
- תמיכה ללא חבילת שירות מידע נוסף זמין במאמר אפליקציות לא בחבילה.
- הרשאות כדי להשתמש במצלמת הדשבורד, נדרשות הרשאות מערכת.
קבלת קוד המקור
מצלמת הרכב היא חלק מהאפליקציות של AAOS שלא נכללות בחבילה. במאמר איך בודקים את הקוד מוסבר איך לבדוק את הקוד ללא החבילה.
עיינו בקוד המקור באמצעות Android Code Search.
קוד המקור זמין בשלושת המודולים הבאים:
- שירות מצלמת הדשבורד לוגיקה של סטרימינג, הקלטה והפעלה.
- מנהל מצלמת הדשבורד מתחבר לשירות Dashcam ומציג ללקוחות ממשק API יציב
- אפליקציית Dashcam: הפניה לאפליקציית Dashcam באמצעות Dashcam Manager API
פיתוח מצלמת הדשבורד
משתמשים ב-Soong או ב-Gradle כדי ליצור את Dashcam.
סונג
ב-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"],
}
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,
}
ב-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 \
יוצרים קובץ הרשאות בשם 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>
מוסיפים את ההרשאות מהמניפסט לקובץ ההרשאות.
לפני שמשתמשים במצלמת הדשבורד, צריך להעניק מראש הרשאות ל-Camera2 לשירות מצלמת הדשבורד, כפי שמתואר במצלמת AAOS.
מוסיפים את קובץ ההרשאות שהוקצו מראש לקובץ Blueprint או לקובץ Make באותו אופן שבו מוסיפים את קובץ ההרשאות.
ב-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>
ב-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,
}
מידע נוסף זמין במאמרים שילוב build מראש בתמונת מערכת והוספת רשימת היתרים.
התקנה ממקור לא ידוע
אפשר גם להעביר את קובץ ההרשאות דרך ה-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
מוסיפים את קובץ ההרשאות לפני ההענקה באופן דומה ל-etc/default-permissions/
.
הגדרת שכבות-על
לשירות מצלמת הרכב יש הגדרות שאפשר להציג בשכבה-על.
הגדרת השירות
dashcam-service/res/values/config.xml
הקובץ הזה מכיל את ההגדרות של השירות:
config_file
השם של קובץ התצורה של הטריגר ב-/assets
allow_internal_storage
מתן הרשאה לשמירת הקלטות באחסון הפנימיboot_startup_enabled
הפעלת שירות מצלמת הדשבורד בזמן האתחול של המכשירnotifications_on
הצגת התראות כשההקלטה מתחילהdefault_app_component
אפליקציית ברירת המחדל למצלמת הרכב, שיש לה גישה להקלטות ברחבי העולם וגישה להפעלה ברחבי העולםrecording_module
ComponentName של הטמעתIRecordingModule
streaming_module
ComponentName של הטמעתIStreamingModule
trigger_module
ComponentName של הטמעתITriggerModule
הגדרת הטריגר
כדי להגדיר את הטריגרים להקלטה, יוצרים עותק של:
dashcam-service/src/assets/config.xml
ומוסיפים אותו לספריית הנכסים. מצביעים על הקובץ הזה ברכיב config_file
בקובץ התצורה של השירות.
הגדרת הטריגר מורכבת מחלקים של אחסון, מצלמה וטריגר:
אחסון
הגדרת האחסון כוללת את הרכיבים הבאים:
maxStorageUsagePercent
אחוז האחסון המקסימלי שמערכת מצלמת הרכב משתמשת בו לפני שמוחקים הקלטות.maxStorageUsageMegabytes
נפח האחסון המקסימלי במיליבייטים שמשמש את מצלמת הרכב לפני שמתבצע חיתוך של ההקלטות.maxAgeHoursBeforePrune
מספר השעות המקסימלי לפני שההקלטה תימחק. אם מגיעה ההגבלה על נפח האחסון, אפשר לחתוך את ההקלטה מוקדם יותר.
מצלמה
הגדרות המצלמה כוללות את הרכיבים הבאים:
מזהה המצלמה. מזהה המצלמה עם הקידומת של המצלמה.
prerollLengthMs
האורך של הווידאו המקדים ששמור עם כל אירוע.width
רוחב אופציונלי של מאגר הנתונים הזמני שמוחזר מהמצלמה.height
גובה אופציונלי של המאגר שמוחזר מהמצלמה.
<CameraConfig>
<Camera
ID="EVS:1"
prerollLengthMs="10000"
width="1920"
height="1080" />
<Camera
ID="Camera2:1"
prerollLengthMs="10000" />
</CameraConfig>
בדוגמה הזו מוצג מזהה מצלמה EVS:1 עם קטע טרום-רול של 10 שניות ברזולוציית 1080p, ומזהה מצלמה Camera2:1 עם קטע טרום-רול של 10 שניות ברוחב ובגובה שמוגדרים כברירת מחדל.
טריגר
הגדרת הטריגר מורכבת מרשימת טריגרים שמוגדרים לפי הפרמטרים הבאים:
name
השם הייחודי של הטריגר.cameras
המזהים של המצלמות.sensorPropertyID
מזהה החיישן עם הקידומת של קבוצת החיישנים. האפשרויות לקידומת הןVHAL
אוSENSOR_MANAGER
.description
תיאור הטריגר שמוצג בממשק המשתמש.recordingLengthMs
משך הזמן לאחר האירוע שרוצים לתעד, באלפיות שנייה.sensorValueType
סוג הנתונים שהחיישן מייצר. האפשרויות הןINT
,INT_ARRAY
,FLOAT
,FLOAT_ARRAY
ו-BOOLEAN, STRING
.thresholdType
איך להעריך את ערך החיישן בהשוואה ל-thresholdValue
. האפשרויות הןAVERAGE
,BOOLEAN
,EQUALS
,LEAP
,LEAP_AVERAGE
,LEAP_OVER
,PEAK
ו-PEAK_HOLD
.thresholdValue
הערך בהשוואה לערך החיישן.thresholdExtra
ערך נוסף שנדרש לסוגי סף מסוימים, כמו טווח עבורAVERAGE
.triggerCooldown
תקופת הצינון באלפיות השנייה לפני הפעלת אירוע נוסף מהסוג הזה.
<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>
בדוגמה הזו מוצג טריגר שבו TriggerModule
עוקב אחרי חיישן VHAL שמייצר ערכים שלמים.
TriggerModule
משווה בין הערך לבין ערך הסף. כשתנאי השוויון מתקיים, הטריגר מתעד במצלמות EVS 1 ו-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"/>
בדוגמה הזו מוצג טריגר שבו TriggerModule
עוקב אחרי חיישן VHAL שמייצר ערכים מסוג float.
הפונקציה TriggerModule
משווה את הממוצע של החיישן על פני טווח של 10
דגימות לערך הסף של 20.0
.
טווח הדגימה מוגדר ב-thresholdExtra
. אפשר להפעיל אירוע חדש רק כל 2000
אלפיות שנייה, כפי שהוגדר ב-triggerCooldown
.
מודולים
שירות מצלמת הרכב מורכב משלושה מודולים:
Stream מכיל את הלוגיקה לטיפול בסטרימינג ממצלמות.
הקלטה מכילה את הלוגיקה לטיפול בהקלטות.
טריגר מכיל את הלוגיקה להפעלת הקלטה מנתוני חיישנים. ממשקי ה-API של המודולים מוגדרים בממשקים המתאימים שלהם,
IStreamModule
, IRecorderModule
ו-ITriggerModule
, וחשופים ל-DashcamManager
דרךDashcamServiceAPI
.
מודולים של שכבת-על
שירות Dashcam משתמש ב-dashcam-service/res/values/config.xml
כדי לקבוע איפה נמצאות הטמעות המודול. יש הטמעות ברירת מחדל לכל מודול. עם זאת, אפשר להציג שכבה של כל מודול על ידי הגדרת הרכיב שלו בערך התצורה המתאים.
הגדרת שם הרכיב של הטמעת ה-OEM של:
IRecorderModule
עדrecording_module
IStreamModule
עדstreaming_module
ITriggerModule
עדtrigger_module
בזמן הריצה, שירות Dashcam יוצר מופע של שם הרכיב שמוגדר ב-config.xml
לכל מודול.
מדריך למפתחי אפליקציות
Dashcam הוא פתרון מצלמת דשבורד וגם בהתאמה אישית, שעומד בדרישות של סביבות ייצור. Dashcam משתמש בממשקי ה-API של Dashcam Manager כדי לתקשר עם Dashcam service
. אפשר למצוא את Dashcam Manager API בכתובת IDashcamManager
. כל אפליקציה עם ההרשאות הנדרשות יכולה להשתמש ב-Dashcam Manager.
OverlayUI
אפשר להתאים אישית את האפליקציה באמצעות שכבות-על של משאבי זמן ריצה. למידע נוסף, ראו שכבות-על של משאבים בסביבת זמן ריצה. לרשימת הרכיבים שאפשר להציג מעליהם שכבת-על, אפשר לעיין בקובץ overlayable.xml.
הרחבת הטריגרים
אפשר להאריך את הטריגרים לסשן הנוכחי באמצעות קריאה ל-DashcamManager#addTrigger()
. טריגרים שנוספו נשארים בתוקף רק בסשן הנוכחי.
הפעלה אוטומטית
אין תמיכה בהפעלה אוטומטית של ההקלטה. עם זאת, אפשר להפעיל טריגר ידני onBoot
באמצעות קריאה ל-DashcamManager.startRecording()
שיטות מומלצות
אחסון מומלץ מאוד להשתמש באחסון חיצוני נשלף.
חוויית המשתמש תכנון ממשק המשתמש של אפליקציית מצלמת הדשבורד כך שיהיה אינטואיטיבי ונוח למשתמש, בהתאם להנחיות העיצוב של AAOS.
אופטימיזציה של הביצועים לבצע אופטימיזציה של הביצועים של האפליקציה כדי לצמצם את השימוש במשאבים ולהבטיח פעולה חלקה ב-AAOS.
פתרון בעיות
בעיות בקישוריות של המצלמה צריכה להיות תמיכה ב-EVS או ב-Camera2 והם צריכים להיות זמינים ב-AAOS IVI.
שגיאות אחסון איך בודקים את נפח האחסון הזמין ומנהלים את ההקלטות. מומלץ מאוד להשתמש באחסון חיצוני, כי שימוש באחסון פנימי עלול לגרום לבלאי מוקדם של האחסון.