תיעוד הפעלה של וידאו ואודיו

אפליקציה יכולה להקליט את הסרטון או האודיו שמתנגנים מאפליקציה אחרת. אפליקציות כאלה צריכות לטפל בצורה נכונה באסימון MediaProjection. בדף הזה נסביר איך. בנוסף, מוסבר איך אדמין של מכשיר יכול להשבית את היכולת להקליט צילומי מסך, ואיך אפליקציית אודיו יכולה למנוע מאפליקציות אחרות להקליט את התוכן שהיא מפעילה.

איך מטפלים בטוקן MediaProjection

ה-API של MediaProjection מאפשר לאפליקציות לקבל אסימון MediaProjection שמעניק להן גישה חד-פעמית לצילום תוכן המסך או אודיו. מערכת Android OS מבקשת מהמשתמש הרשאה לפני שמעניקים את האסימון לאפליקציה שלכם.

מערכת ההפעלה מציגה את האסימונים הפעילים של MediaProjection בממשק המשתמש של ההגדרות המהירות, ומאפשרת למשתמשים לבטל את הגישה לאסימון בכל שלב. במקרה כזה, המסכים הווירטואליים או שידורי האודיו שמשויכים לסשן יפסיקו לקבל שידורי מדיה. האפליקציה צריכה להגיב בצורה מתאימה, אחרת היא תמשיך להקליט דממה או שידור וידאו שחור.

כדי לטפל באובדן אסימון, צריך לרשום קריאה חוזרת (callback) במכונה MediaProjection באמצעות השיטה registerCallback ולהפסיק את ההקלטה כשמתבצעת קריאה לשיטה onStop.

מידע נוסף זמין במאמר הקרנת מדיה.

צילום סרטון

באפליקציה לדוגמה של ScreenCapture מוסבר איך משתמשים ב-Media Projection API כדי לצלם את המסך של המכשיר בזמן אמת ולהציג אותו ב-SurfaceView.

אפשר להשתמש בDevicePolicyManager כדי למנוע הקלטת מסך. בחשבונות ארגוניים (Android for Work), מנהל המערכת יכול להשבית את איסוף הנתונים של העוזר הדיגיטלי בפרופיל העבודה באמצעות המתודה setScreenCaptureDisabled.

בקודלאב ניהול מכשירי Android ללא אפליקציה מוסבר איך לאסור צילום מסך.

תיעוד הפעלת האודיו

AudioPlaybackCapture API הוצג ב-Android 10. ממשק ה-API הזה מאפשר לאפליקציות להעתיק את האודיו שמשודר על ידי אפליקציות אחרות. התכונה הזו היא המקבילה של צילום מסך, אבל לאודיו. התרחיש העיקרי לדוגמה הוא באפליקציות סטרימינג שרוצות לתעד את האודיו שמשוחק במשחקים.

שימו לב ש-AudioPlaybackCapture API לא משפיע על זמן האחזור של האפליקציה שהאודיו שלה מוקלט.

פיתוח אפליקציית צילום

מטעמי אבטחה ופרטיות, יש הגבלות מסוימות על תיעוד ההפעלה. כדי שאפשר יהיה לצלם אודיו, האפליקציה צריכה לעמוד בדרישות הבאות:

  • לאפליקציה צריכה להיות ההרשאה RECORD_AUDIO.
  • האפליקציה צריכה להציג את ההנחיה שמוצגת על ידי MediaProjectionManager.createScreenCaptureIntent(), והמשתמש צריך לאשר אותה.
  • האפליקציות לצילום ולנגינה חייבות להיות באותו פרופיל משתמש.

כדי להקליט אודיו מאפליקציה אחרת, האפליקציה צריכה ליצור אובייקט AudioRecord ולהוסיף לו AudioPlaybackCaptureConfiguration. בצע את השלבים הבאים:

  1. קוראים ל-AudioPlaybackCaptureConfiguration.Builder.build() כדי ליצור AudioPlaybackCaptureConfiguration.
  2. מעבירים את ההגדרות אל AudioRecord באמצעות קריאה ל-setAudioPlaybackCaptureConfig.

שליטה בהקלטת האודיו

האפליקציה יכולה לקבוע אילו סוגי תוכן היא יכולה להקליט, ואילו סוגים אחרים של אפליקציות יכולים להקליט את ההפעלה שלהם.

הגבלת תיעוד באמצעות תוכן אודיו

אפליקציות יכולות להגביל את האודיו שהיא יכולה להקליט באמצעות השיטות הבאות:

שימו לב שאי אפשר להשתמש בשיטות addMatchingUsage() ו-excludeUsage() יחד. צריך לבחור באחת משתי האפשרויות. כמו כן, אי אפשר להשתמש ב-addMatchingUid() וב-excludeUid() בו-זמנית.

הגבלת הצילום על ידי אפליקציות אחרות

אתם יכולים להגדיר אפליקציה כך שלאפליקציות אחרות לא תהיה אפשרות לתעד את האודיו שלה. אפשר לתעד את האודיו שמגיע מאפליקציה רק אם האפליקציה עומדת בדרישות הבאות:

שימוש

הנגן שמפיק את האודיו צריך להגדיר את השימוש בו ל-USAGE_MEDIA, ל-USAGE_GAME או ל-USAGE_UNKNOWN.

מדיניות הצילום

מדיניות הצילום של הנגן חייבת להיות AudioAttributes.ALLOW_CAPTURE_BY_ALL, כדי לאפשר לאפליקציות אחרות להקליט את ההפעלה. אפשר לעשות זאת בכמה דרכים:

אם התנאים המוקדמים האלה מתקיימים, אפשר לתעד כל אודיו שנוצר על ידי הנגן.

השבתת תיעוד המערכת

ההגנות שמאפשרות צילום שמתוארות למעלה חלות רק על אפליקציות. רכיבי המערכת של Android יכולים לתעד את ההפעלה כברירת מחדל. ספקי Android מתאימים אישית הרבה מהרכיבים האלה, והם תומכים בתכונות כמו נגישות כתוביות. לכן מומלץ שאפליקציות יאפשרו למערכת להקליט את ההפעלה. במקרים נדירים שבהם אתם לא רוצים שהמערכת תתעד את ההפעלה של האפליקציה, צריך להגדיר את מדיניות הצילום לערך ALLOW_CAPTURE_BY_NONE.

הגדרת מדיניות בזמן הריצה

אפשר להפעיל את AudioManager.setAllowedCapturePolicy() כדי לשנות את מדיניות הצילום בזמן שהאפליקציה פועלת. אם MediaPlayer או AudioTrack מופעלים בזמן הקריאה לשיטה, האודיו לא מושפע. עליכם לסגור ולפתוח מחדש את הנגן או לעקוב אחרי השינויים כדי שהשינוי במדיניות ייכנס לתוקף.

מדיניות = manifest +‏ AudioManager +‏ AudioAttributes

אפשר לציין את מדיניות הצילום בכמה מקומות, ולכן חשוב להבין איך נקבעת המדיניות בפועל. המערכת תמיד מחילה את מדיניות הצילום המגבילה ביותר. לדוגמה, אפליקציה שהמניפסט שלה כולל את setAllowedCapturePolicy="false" לעולם לא תאפשר לאפליקציות שאינן מערכתיות לצלם את האודיו שלה, גם אם הערך של AudioManager#setAllowedCapturePolicy מוגדר כ-ALLOW_CAPTURE_BY_ALL. באופן דומה, אם הערך של AudioManager#setAllowedCapturePolicy מוגדר כ-ALLOW_CAPTURE_BY_ALL והמניפסט מגדיר את הערך setAllowedCapturePolicy="true", אבל הערך של AudioAttributes של נגן המדיה נוצר באמצעות AudioAttributes.Builder#setAllowedCapturePolicy(ALLOW_CAPTURE_BY_SYSTEM), לאפליקציות שאינן מערכתיות לא תהיה אפשרות לצלם את נגן המדיה הזה.

הטבלה הבאה מסכמת את ההשפעה של מאפיין המניפסט והמדיניות בפועל:

allowAudioPlaybackCapture ALLOW_CAPTURE_BY_ALL ALLOW_CAPTURE_BY_SYSTEM ALLOW_CAPTURE_BY_NONE
true כל אפליקציה מערכת בלבד ללא תיעוד
false מערכת בלבד מערכת בלבד אין צילום