שילוב ExoPlayer

במסמך הזה מפורטת סקירה כללית של השילוב של ניהול תורים ו-DRM תמיכה.

שיפורי DRM

הדגמת Cast של ExoPlayer עודכנה לשימוש בדרך מובנית להעברת תצורה של DRM באמצעות MediaInfo של ExoPlayer לאפליקציית המקבל. דוגמה של Cast משתמש גם במקלט הדגמה שכולל את אותו קוד בסקירה הכללית הזו, וכך מאפשר כדי לבדוק את התמיכה ב-DRM. עם זאת, כדי להפעיל Cast שמוגן באמצעות DRM צריך ליצור ולארח Web foundr.

לפני שמתחילים, כדאי שתכירו את תיעוד בנושא תמיכה ב-DRM ב Google Cast ו-ExoPlayer. הסקירה הכללית מראה איך כדי לחבר את התצורה של ExoPlayer DRM למקלט אינטרנט. למידע שמסביר איך להשתמש ב-DRM ב-ExpoPlayer, ראו את אתר ExoPlayer.

מתן הגדרות DRM

אפליקציית ההדגמה של ExoPlayer מכילה קוד לדוגמה שמראה איך לספק DRM כחלק מ-MediaItem. ארבע האפשרויות שאפשר להגדיר הן:

  • כותרות - מילון של כותרות שחלות על בקשת ה-HTTPS על לאחזר את רישיון ה-DRM.
  • כתובת URL של הרישיון – כתובת ה-URL ששימשה לרכישת הרישיון.
  • Protection System – סכימת ההגנה של DRM שמשמשת להגנה על התוכן, לדוגמה, Widevine.

הגדרת ה-DRM שמספקים ל-ExpoPlayer נשלחת למקלט כנכס ב-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 מכל אובייקט של בקשת טעינה, יוצרים מיירט בקשות טעינה באפליקציית ה-SDK של מכשיר ה-Web קבלה.

השלב הראשון הוא לרשום את ה-handlers לפני התחלת ההעברה (cast) תרגום מכונה.

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 שנשלחה על ידי האפליקציה. אפשר שמירת האובייקט הזה כמשתנה גלובלי לשימוש ב-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 של בקשת רישיון

ה-handler של בקשת הרישיון מאפשר להתאים אישית את בקשת ה-HTTPS באינטרנט המקבל יוצר לשרת הרישיונות שלך. ה-handler הועבר NetworkRequestInfo שבו ניתן להשתמש כדי להוסיף כותרות HTTP, לכלול קובצי Cookie או אפילו לשנות את כתובת האתר. ה-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 והשילוב של הפעלת Cast עשויות להיות דווחו ב-GitHub של ExoPlayer של מאגר הנתונים.