ניהול זכויות דיגיטלי (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 בלבד)
ClearKey ‏'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 בזמן היצירה של פריט המדיה.

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

אם רוצים להתאים אישית את 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), תוכלו לנסות להפעיל את האפשרות 'הוספה לתור של מאגר נתונים אסינכררוני'.