การผสานรวม ExoPlayer

เอกสารนี้ให้ภาพรวมของการจัดคิวและการผสานรวม DRM การสนับสนุน

การเพิ่มประสิทธิภาพ DRM

การสาธิตการแคสต์ ExoPlayer ได้รับการอัปเดตให้ใช้วิธีการแบบมีโครงสร้างในการส่งผ่านการกำหนดค่า DRM โดยใช้ MediaInfo ของ ExoPlayer ไปยังแอปพลิเคชันตัวรับสัญญาณ ตัวอย่างการแคสต์ ยังใช้ตัวรับการสาธิตที่มีโค้ดเดียวกันในภาพรวมนี้ ซึ่งช่วยให้ เพื่อทดสอบการสนับสนุน DRM อย่างไรก็ตาม หากคุณต้องการแคสต์การปกป้องด้วย DRM คุณควรสร้างและโฮสต์เนื้อหาของคุณเอง เว็บรีซีฟเวอร์

ก่อนจะเริ่มต้นใช้งาน คุณควรทำความคุ้นเคยกับ เกี่ยวกับการสนับสนุน DRM ใน Google Cast และ ExoPlayer ภาพรวมนี้จะแสดงวิธี เพื่อเดินสายการกำหนดค่า ExoPlayer DRM ไปยังเว็บรีซีฟเวอร์ สำหรับข้อมูล เกี่ยวกับวิธีใช้ DRM ใน ExoPlayer เว็บไซต์ ExoPlayer

การระบุการกำหนดค่า DRM

แอปเดโม ExoPlayer มีโค้ดตัวอย่างที่แสดงวิธีจัดเตรียม DRM ให้เป็นส่วนหนึ่งของ MediaItem ตัวเลือก 4 อย่างที่คุณกำหนดค่าได้มีดังนี้

  • ส่วนหัว - พจนานุกรมของส่วนหัวที่ใช้กับคำขอ HTTPS เพื่อ เรียกดูใบอนุญาต DRM
  • URL ใบอนุญาต - URL ที่ใช้ในการขอใบอนุญาต
  • ระบบการป้องกัน - แผนการป้องกัน 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;
  }
}

การตั้งค่าเบื้องต้น

คุณอาจต้องกำหนดค่า licenseRequestHandler โดยขึ้นอยู่กับโซลูชัน DRM ที่ใช้ และ mediaPlaybackInfoHandler licenseRequestHandler ช่วยให้คุณปรับแต่ง วิธีที่ CAF ขอใบอนุญาตจากเซิร์ฟเวอร์คีย์ใบอนุญาตของคุณ mediaPlaybackInfoHandler ช่วยให้คุณแก้ไข PlaybackConfig ตามรายการสื่อแต่ละรายการ เช่น เนื้อหาแต่ละส่วนต้องมี URL ของเซิร์ฟเวอร์ใบอนุญาตอื่น

หากต้องการบันทึกสำเนาของ ExoPlayerConfig จากออบเจ็กต์คำขอโหลดแต่ละรายการ ให้สร้าง ตัวตัดคำขอโหลดในแอปพลิเคชัน SDK ของตัวรับเว็บ

ขั้นตอนแรกคือการลงทะเบียนเครื่องจัดการก่อนที่จะเริ่มแคสต์ แอปพลิเคชัน

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 ที่ช่วยให้คุณดูและแก้ไข คำขอโหลดการแคสต์ก่อนที่ CAF จะพยายามโหลดรายการสื่อ ที่สำคัญคือ ซึ่งเรียกใช้ก่อนเครื่องมือยื่นขอใบอนุญาตและเครื่องจัดการข้อมูลการเล่นสื่อ

ตัวตัดคำขอโหลดถูกส่งผ่าน LoadRequestData ที่มี Exo Player Config ที่แอปของคุณส่งมา คุณสามารถ บันทึกออบเจ็กต์นี้เป็นตัวแปรร่วมเพื่อใช้ในเครื่องจัดการคำขอใบอนุญาต และเครื่องจัดการข้อมูลการเล่นสื่อ

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;
}

เครื่องจัดการคำขอใบอนุญาต

เครื่องจัดการคำขอใบอนุญาตช่วยให้คุณปรับแต่งคำขอ HTTPS บนเว็บได้ ผู้รับส่งไปยังเซิร์ฟเวอร์ใบอนุญาตของคุณ เครื่องจัดการถูกส่งผ่าน NetworkRequestInfo ซึ่งคุณสามารถใช้เพื่อเพิ่มส่วนหัว HTTP, รวมคุกกี้ หรือแม้แต่ แก้ไข URL ตัวจัดการควรส่งคืนออบเจ็กต์นี้

ตัวอย่างเช่น ถ้าคุณต้องการเพิ่มส่วนหัวที่กำหนดเองในคำขอใบอนุญาต คุณ สามารถสร้างเครื่องจัดการคำขอใบอนุญาตที่คล้ายกับ

licenseRequestHandler(networkRequestInfo) {
    if (!exoPlayerConfig) {
        return networkRequestInfo;
    }

    networkRequestInfo.headers =
            exoPlayerConfig.headers ? exoPlayerConfig.headers : undefined;

    return networkRequestInfo;
}

เครื่องจัดการข้อมูลการเล่นสื่อ

เครื่องจัดการข้อมูลการเล่นสื่อช่วยให้คุณเปลี่ยนแปลงการเล่นได้ กำหนดค่าตามรายการสื่อแต่ละรายการ เครื่องจัดการถูกส่งผ่าน LoadRequestData และ PlaybackConfig คุณควรแสดงการกำหนดค่าการเล่น เครื่องจัดการข้อมูลการเล่นสื่อจะ ที่ถูกเรียกก่อนที่แต่ละรายการที่คุณแคสต์จะโหลด หากคุณมี 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 ที่เก็บได้