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