ניהול זכויות דיגיטלי (DRM)

ExoPlayer משתמש ב-API MediaDrm של Android כדי לתמוך בהפעלה שמוגנת באמצעות DRM. הגרסאות המינימליות של Android שנדרשות לסכימות DRM נתמכות שונות, יחד עם בפורמטים של סטרימינג שבהם הם נתמכים, מתוארים הטבלה הבאה:

סכימת DRM מספר גרסה של Android רמת ה-API ב-Android פורמטים נתמכים
Widevine "cenc" 4.4 19 DASH, HLS (FMP4 בלבד)
Widevine "cbcs" 7.1 25 DASH, HLS (FMP4 בלבד)
DeleteKey 'cenc' 5.0 21 DASH
PlayReady SL2000 "cenc" Android TV Android TV DASH, SmoothStreaming, HLS (FMP4 בלבד)

כדי להפעיל תוכן המוגן באמצעות DRM באמצעות ExoPlayer, ה-UUID של ה-DRM צריך לציין מערכת כשיוצרים פריט מדיה, אפשר לספק גם נכסים. הנגן ישתמש במאפיינים האלה כדי לפתח הטמעת ברירת מחדל של DrmSessionManager, שנקראת DefaultDrmSessionManager, מתאים לרוב תרחישי השימוש. לשימוש מסוים במקרים מסוימים, ייתכן שיהיה צורך בנכסי DRM נוספים, כפי שמפורט בסעיפים הבאים .

רוטציית מפתחות

כדי להפעיל שידורים עם מקשים מסתובבים, מעבירים את true אל MediaItem.DrmConfiguration.Builder.setMultiSession כשיוצרים את המדיה שימושי.

תוכן עם מספר מפתחות

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

מקרה 1: תגובה של שרת רישיונות עם כל המפתחות לתוכן

במקרה זה, שרת הרישיונות מוגדר כך שכאשר הוא מקבל בקשה למפתח אחד, הוא נותן תשובה עם כל המפתחות של התוכן. במקרה הזה מטופל על ידי ExoPlayer ללא צורך בתצורה מיוחדת. התאמה בין זרמים (למשל, וידאו באיכות SD ו-HD) הוא חלק, גם אם הם משתמשים מקשי קיצור.

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

מקרה 2: תגובה של שרת רישיונות עם מפתח מבוקש בלבד

במקרה הזה, שרת הרישיונות מוגדר להגיב רק עם המפתח שצוינו בבקשה. עם הרישיון הזה אפשר להפעיל תוכן מרובה מפתחות הגדרת השרת על ידי העברת true אל MediaItem.DrmConfiguration.Builder.setMultiSession כשיוצרים את המדיה שימושי.

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

מפתחות אופליין

ניתן לטעון קבוצת מפתחות אופליין על ידי העברת מזהה קבוצת המפתחות אל MediaItem.DrmConfiguration.Builder.setKeySetId כשיוצרים את פריט המדיה. כך מתאפשרת הפעלה באמצעות המקשים שמאוחסנים בערכת המקשים במצב אופליין עם המזהה שצוין.

סשנים של DRM לתוכן ברור

השימוש ב-placeholder DrmSessions מאפשר ל-ExoPlayer להשתמש באותם מפענחים עבור ניקוי תוכן כפי שהוא משמש כשמפעילים תוכן מוצפן. כשהמדיה מכילה גם בקטעים ברורים וגם בקטעים מוצפנים, כדאי להשתמש ב-placeholder DrmSessions כדי למנוע יצירה מחדש של מפענחים כשעוברים בין מצב שקוף למוצפן. כדי ליצור קטעים חדשים. השימוש ב-placeholder DrmSessions לטראקים של אודיו ווידאו עשוי מופעל על ידי העברה של true אל MediaItem.DrmConfiguration.Builder.forceSessionsForAudioAndVideoTracks כאשר ובניית פריט המדיה.

שימוש ב-DmSessionManager בהתאמה אישית

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

Kotlin

val customDrmSessionManager: DrmSessionManager = CustomDrmSessionManager()
// Pass a drm session manager provider to the media source factory.
val mediaSourceFactory =
  DefaultMediaSourceFactory(context).setDrmSessionManagerProvider { customDrmSessionManager }

Java

DrmSessionManager customDrmSessionManager = new CustomDrmSessionManager(/* ... */ );
// Pass a drm session manager provider to the media source factory.
MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDrmSessionManagerProvider(mediaItem -> customDrmSessionManager);

שיפור ביצועי ההפעלה

אם יש הפסקות בסרטונים בזמן הפעלה של תוכן המוגן באמצעות DRM מכשירים שפועלת בהם גרסת Android כלשהי מ-Android 6.0 (רמת API 23) עד כולל Android 11 (רמת API 30), אפשר לנסות להפעיל מאגר נתונים אסינכרוני. בתור.