אפליקציית מצלמת הדשבורד מיועדת לשילוב עם AAOS, ומספקת לנהגים יכולות צילום וידאו לשיפור הבטיחות והאבטחה. במדריך הזה מפורטות הדרישות הטכניות, השלבים להטמעה ושיטות מומלצות שיעזרו לכם להטמיע את התכונה בהצלחה.
דרישות סף
לפני שממשיכים, צריך לוודא שהתנאים המוקדמים הבאים מתקיימים:
SDK:
- נדרשת גרסת SDK 31 ואילך.
חומרה:
- מצלמות EVS או Camera2 שזמינות ל-AAOS.
- צריך שיהיה מספיק מקום באחסון הפנימי או תמיכה באחסון חיצוני נשלף
כדי להקליט סרטונים.
דרישות התוכנה:
- תמיכה לא מאוגדת. מידע נוסף על אפליקציות לא מקובצות
- הרשאות. כדי להשתמש במצלמת הדשבורד, נדרשות הרשאות מערכת.
קבלת קוד המקור
מצלמת הדשבורד היא חלק מאפליקציות AAOS נפרדות. כדי לבדוק את הקוד הלא מאוגד, אפשר לעיין במאמר בנושא בדיקת הקוד.
מעיינים בקוד המקור באמצעות Android Code Search.
קוד המקור מופיע בשלושת המודולים האלה:
- שירות מצלמת דשבורד. לוגיקה של סטרימינג, הקלטה והפעלה.
- Dashcam Manager מתחבר לשירות מצלמת הרכב וחושף API יציב ללקוחות
- אפליקציית מצלמת דשבורד. הפניה לאפליקציית מצלמת דשבורד באמצעות Dashcam Manager API
הרכבת מצלמת הדשבורד
משתמשים ב-Soong או ב-Gradle כדי לבצע build של מצלמת הדשבורד.
סונג
ב-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/
הוראות מפורטות ליצירת 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,
}
מידע נוסף זמין במאמרים שילוב של קובץ מובנה מראש בתמונת מערכת והוספת רשימת היתרים.
התקנה בשיטה חלופית
אפשר גם לבצע העלאה צדדית של קובץ ההרשאות. משתמשים בשיטה הזו אם מצלמת הרכב המובנית לא מוגדרת.
באמצעות קובץ ההרשאות שנוצר בקטע של התכונות המוכנות מראש, מריצים את הפקודה:
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_moduleComponentName ofIRecordingModuleimplementationstreaming_moduleComponentName ofIStreamingModuleimplementationtrigger_moduleComponentName ofITriggerModuleimplementation
הגדרת הטריגר
כדי להגדיר את הטריגרים להקלטה, יוצרים עותק של:
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-service/res/values/config.xml כדי לקבוע איפה נמצאות ההטמעות של המודולים. הטמעות ברירת מחדל מסופקות לכל מודול. עם זאת, אפשר להגדיר את הרכיב של כל מודול בערך ההגדרה המתאים כדי להציג אותו כשכבת-על.
הגדרת שם רכיב ההטמעה של OEM:
IRecorderModuleעדrecording_moduleIStreamModuleעדstreaming_moduleITriggerModuleעדtrigger_module
בזמן הריצה, שירות מצלמת הרכב יוצר מופע של שם הרכיב שהוגדר ב-config.xml לכל מודול.
מדריך למפתחי אפליקציות
מצלמת הדשבורד היא פתרון מוכן לייצור וניתן להתאמה אישית. מצלמת הדשבורד משתמשת בממשקי Dashcam Manager API כדי לתקשר עם Dashcam service. ממשק ה-API של Dashcam Manager נמצא בכתובת IDashcamManager. כל אפליקציה עם ההרשאות הנדרשות יכולה להשתמש באפליקציית ניהול מצלמת הדשבורד.
OverlayUI
אפשר להתאים אישית את האפליקציה באמצעות שכבות-על של משאבים בזמן ריצה. מידע נוסף זמין במאמר בנושא שכבות-על של משאבים בזמן ריצה. כדי לראות את רשימת הרכיבים שאפשר להוסיף להם שכבת-על, אפשר לעיין ב-overlayable.xml.
הרחבת טריגרים
אפשר להאריך את משך ההפעלה של טריגרים בסשן הנוכחי באמצעות קריאה ל-DashcamManager#addTrigger(). הטריגרים שמוסיפים נשמרים רק לסשן הנוכחי.
הפעלה אוטומטית
אין תמיכה בהתחלת הקלטה אוטומטית. עם זאת, אפשר להפעיל טריגר ידני onBoot באמצעות קריאה ל-DashcamManager.startRecording()
שיטות מומלצות
אחסון מומלץ מאוד להשתמש באמצעי אחסון חיצוניים ניידים.
חוויית משתמש. עיצוב ממשק המשתמש של אפליקציית מצלמת הדשבורד באופן אינטואיטיבי וידידותי למשתמש, בהתאם להנחיות העיצוב של AAOS.
אופטימיזציה של הביצועים. אופטימיזציה של ביצועי האפליקציה כדי למזער את השימוש במשאבים ולהבטיח פעולה חלקה ב-AAOS.
פתרון בעיות
בעיות בחיבור המצלמה. מערכת התצוגה החיצונית (EVS) או Camera2 צריכות להיות נתמכות וזמינות במערכת AAOS IVI.
שגיאות אחסון. בודקים את נפח האחסון הזמין ומנהלים את ההקלטות. מומלץ מאוד להשתמש באחסון חיצוני, כי שימוש באחסון פנימי עלול לגרום לבלאי מוקדם של האחסון.