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