במאמר הזה מפורטת סקירה כללית של התמיכה בנושא תור ושילוב של ניהול זכויות דיגיטליות (DRM).
שיפורי DRM
הדגמת ההעברה של ExoPlayer עודכנה כדי להשתמש בדרך מובנית להעברת הגדרת DRM באמצעות
ה-MediaInfo
של ExoPlayer לאפליקציה המקבלת. דוגמת ההעברה
כוללת גם מקלט הדגמה (דמו) שכולל את אותו הקוד בסקירה הכללית הזו, כדי שתוכלו לבדוק את התמיכה ב-DRM. עם זאת, אם אתם רוצים להעביר תוכן המוגן באמצעות DRM, עליכם ליצור ולארח Web Receiver משלכם.
לפני כן, כדאי להכיר את מסמכי התיעוד בנושא התמיכה בניהול זכויות דיגיטליות (DRM) ב-Google Cast וב-ExoPlayer. בסקירה הכללית הזו נסביר איך לחבר את תצורת ה-DRM של ExoPlayer למקלט אינטרנט. למידע על השימוש ב-DRM ב-ExoPlayer, אפשר לבקר באתר הרשמי של ExoPlayer.
מתן תצורת DRM
אפליקציית ההדגמה של ExoPlayer מכילה קוד לדוגמה שמראה איך לספק הגדרת DRM כחלק מ-MediaItem. ארבע האפשרויות שניתן להגדיר הן:
- Headers – מילון של כותרות שמוחל על בקשת ה-HTTPS כדי לאחזר את רישיון ה-DRM.
- כתובת ה-URL של הרישיון – כתובת ה-URL ששימשה לקבלת הרישיון.
- Protection System – סכמת ההגנה על DRM שמשמשת להגנה על התוכן, לדוגמה, Widevine.
הגדרת ה-DRM שמספקים ל-ExoPlayer נשלחת לאפליקציית המקבל כנכס ב-customData
באובייקט MediaInformation
כחלק מבקשת טעינה. כברירת מחדל, המאפיין הזה נקרא exoPlayerConfig
, שתואם להגדרה הבאה.
/**
* Extended configuration settings for ExoPlayer.
*/
ExoPlayerConfig class {
constructor() {
/**
* Dictionary of headers to apply to the license request.
* @type {!Object|undefined}
*/
this.headers;
/**
* The URL for your DRM server.
* @type {string|undefined}
*/
this.licenseUrl;
/**
* Preferred protection system to use for decrypting content.
* @type {!cast.framework.ContentProtection|undefined}
*/
this.protectionSystem;
/**
* Indicates whether CORS Access-Control requests should be made using
* credentials such as cookies or authorization headers.
*
* If withCredentials is set to true then Access-Control-Allow-Origin cannot
* be set to '*'.
* @type {boolean|undefined}
*/
this.withCredentials;
}
}
הגדרה ראשונית
בהתאם לפתרון ה-DRM שבו אתם משתמשים, ייתכן שתצטרכו להגדיר licenseRequestHandler
ו-mediaPlaybackInfoHandler
. באמצעות licenseRequestHandler
תוכלו להתאים אישית את האופן שבו CAF מבקש רישיון משרת מפתחות הרישיון שלכם. בעזרת mediaPlaybackInfoHandler
אפשר לשנות את הערך של PlaybackConfig
לכל פריט מדיה אם, לדוגמה, לכל קטע תוכן צריך להשתמש בכתובת URL אחרת של שרת רישיונות.
כדי לתעד עותק של ה-ExoPlayerConfig
מכל אובייקט של בקשת טעינה, צריך ליצור מיירט בקשות טעינה באפליקציה Web Receiver SDK.
השלב הראשון הוא לרשום את ה-handlers לפני שמפעילים את אפליקציית ההעברה.
const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
playbackConfig.licenseRequestHandler =
licenseRequestHandler;
context.getPlayerManager().setMediaPlaybackInfoHandler(
mediaPlaybackInfoHandler);
context.getPlayerManager().setMessageInterceptor(
cast.framework.messages.MessageType.LOAD,
loadInterceptor);
// starts the Cast application
context.start({playbackConfig: playbackConfig});
טעינת הכלי ליירוט בקשות
הכלי ליירוט בקשות טעינה הוא קריאה חוזרת (callback) שמאפשרת להציג ולשנות את בקשת הטעינה של Cast לפני ש-CAF מנסה לטעון פריט מדיה. חשוב מכך, הוא נקרא לפני הגורם המטפל בבקשת הרישיון וה-handler של המידע של הפעלת המדיה.
מיירט בקשות הטעינה מועבר אובייקט LoadRequestData
שמכיל את Exo Player Config שנשלח על ידי האפליקציה. אפשר לשמור את האובייקט הזה כמשתנה גלובלי לשימוש ב-handler של בקשות הרישיון וב-handler למידע על הפעלת מדיה.
loadInterceptor(loadRequestData) {
// not every load request will have a customData object
if (loadRequestData.media && loadRequestData.media.customData &&
loadRequestData.media.customData['exoPlayerConfig']) {
// exoPlayerConfig is a global variable here
exoPlayerConfig =
loadRequestData.media.customData['exoPlayerConfig'];
}
// you must return the loadRequestData object
return loadRequestData;
}
handler של בקשת רישיון
הגורם המטפל בבקשת הרישיון מאפשר לכם להתאים אישית את בקשת ה-HTTPS
שמקבל האינטרנט שולח לשרת הרישיונות שלכם. ה-handler מעביר אובייקט NetworkRequestInfo
, שבאמצעותו אפשר להוסיף כותרות HTTP, לכלול קובצי cookie ואפילו לשנות את כתובת ה-URL. ה-handler צריך להחזיר את האובייקט הזה.
אם, למשל, צריך להוסיף כותרות מותאמות אישית לבקשת הרישיון, תוכלו ליצור handler של בקשת רישיון באופן הבא:
licenseRequestHandler(networkRequestInfo) {
if (!exoPlayerConfig) {
return networkRequestInfo;
}
networkRequestInfo.headers =
exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;
return networkRequestInfo;
}
handler של מידע להפעלת מדיה
ה-handler של פרטי ההפעלה של המדיה מאפשר לבצע שינויים בהגדרות ההפעלה על בסיס כל פריט מדיה בנפרד. ה-handler מעביר LoadRequestData
ו-PlaybackConfig
, וצריך להחזיר את הגדרת ההפעלה. ה-handler של פרטי הפעלת מדיה יופעל
לפני טעינת כל פריט ש-Cast נטען. אם היו לכם כתובות URL של רישיונות לפי תוכן, תוכלו לשנות אותן ואת מערכת ההגנה לפני הטעינה.
mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
if (!exoPlayerConfig) {
return;
}
playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
exoPlayerConfig.licenseUrl :
undefined;
playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
exoPlayerConfig.protectionSystem :
undefined;
return playbackConfig;
}
מקורות מידע נוספים
כל הטמעה של DRM היא מותאמת אישית, והקוד הזה מסופק להדגמה בלבד. יש להתייעץ עם ספק ה-DRM כדי לוודא שהטמעתם DRM בצורה נכונה באפליקציות ExoPlayer ו-Cast.
האתר של ExoPlayer כולל מסמכים והודעות עדכניים. ניתן לדווח על בעיות ב-ExoPlayer ובשילוב ההעברה שלו במאגר GitHub של ExoPlayer.