Tích hợp ExoPlayer

Tài liệu này cung cấp thông tin tổng quan về tính năng xếp hàng đợi và tích hợp DRM (Quản lý bản quyền nội dung).

Cải tiến DRM

Bản minh hoạ ExoPlayer Cast đã được cập nhật để sử dụng một cách có cấu trúc nhằm truyền cấu hình DRM bằng cách sử dụng MediaInfo của ExoPlayer sang ứng dụng bộ thu. Mẫu Cast cũng sử dụng bộ thu minh hoạ bao gồm mã tương tự trong phần tổng quan này, cho phép bạn kiểm thử khả năng hỗ trợ DRM. Tuy nhiên, nếu muốn truyền nội dung được bảo vệ bằng DRM, bạn nên tạo và lưu trữ Trình thu nhận web của riêng mình.

Trước khi bắt đầu, bạn nên làm quen với tài liệu về tính năng hỗ trợ DRM trong Google CastExoPlayer. Phần tổng quan này sẽ hướng dẫn bạn cách kết nối cấu hình DRM của ExoPlayer cho Trình thu nhận web. Để biết thông tin về cách sử dụng DRM trong ExoPlayer, vui lòng xem trang web chính thức của ExoPlayer.

Cung cấp cấu hình DRM

Ứng dụng minh hoạ ExoPlayer chứa mã mẫu cho thấy cách cung cấp cấu hình DRM như một phần của MediaItem. Bốn tuỳ chọn bạn có thể định cấu hình là:

  • Tiêu đề – từ điển tiêu đề được áp dụng cho yêu cầu HTTPS để truy xuất giấy phép DRM.
  • URL giấy phép – URL dùng để lấy giấy phép.
  • Hệ thống bảo vệ – sơ đồ bảo vệ DRM dùng để bảo vệ nội dung, chẳng hạn như Widevine.

Cấu hình DRM mà bạn cung cấp cho ExoPlayer sẽ được gửi đến ứng dụng nhận của bạn dưới dạng thuộc tính trong customData trên đối tượng MediaInformation như một phần của yêu cầu tải. Theo mặc định, thuộc tính này được gọi là exoPlayerConfig, khớp với định nghĩa sau.

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

Thiết lập ban đầu

Tuỳ thuộc vào giải pháp DRM mà bạn sử dụng, bạn có thể phải định cấu hình licenseRequestHandlermediaPlaybackInfoHandler. licenseRequestHandler cho phép bạn tuỳ chỉnh cách CAF yêu cầu giấy phép từ máy chủ khoá cấp phép của bạn. mediaPlaybackInfoHandler cho phép bạn sửa đổi PlaybackConfig trên cơ sở từng mục nội dung đa phương tiện nếu chẳng hạn như mỗi phần nội dung phải sử dụng một URL máy chủ cấp phép khác nhau.

Để chụp bản sao của ExoPlayerConfig từ mỗi đối tượng yêu cầu tải, hãy tạo một trình chặn yêu cầu tải trong ứng dụng SDK Web receiver của bạn.

Bước đầu tiên là đăng ký các trình xử lý trước khi khởi động ứng dụng Truyền.

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

Tải yêu cầu chặn

Trình chặn yêu cầu tải là một lệnh gọi lại cho phép bạn xem và sửa đổi yêu cầu tải Truyền trước khi CAF cố gắng tải một mục nội dung nghe nhìn. Quan trọng là lệnh này được gọi trước trình chuyển giao yêu cầu cấp phép và trình xử lý thông tin phát nội dung đa phương tiện.

Trình chặn yêu cầu tải được truyền đối tượng LoadRequestData chứa Cấu hình trình phát Exo mà ứng dụng của bạn đã gửi. Bạn có thể lưu đối tượng này dưới dạng biến toàn cục để sử dụng trong trình xử lý yêu cầu cấp phép và trình xử lý thông tin phát nội dung đa phương tiện.

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

Trình xử lý yêu cầu cấp phép

Trình xử lý yêu cầu cấp phép cho phép bạn tuỳ chỉnh yêu cầu HTTPS mà Web Receiver gửi đến máy chủ cấp phép của bạn. Trình xử lý được truyền một đối tượng NetworkRequestInfo. Sau đó, bạn có thể sử dụng đối tượng này để thêm tiêu đề HTTP, bao gồm cookie hoặc thậm chí sửa đổi URL. Trình xử lý sẽ trả về đối tượng này.

Chẳng hạn, nếu cần thêm tiêu đề tuỳ chỉnh vào yêu cầu cấp phép, bạn có thể tạo một trình xử lý yêu cầu cấp phép tương tự như sau:

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

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

    return networkRequestInfo;
}

Trình xử lý thông tin phát nội dung đa phương tiện

Trình xử lý thông tin phát nội dung đa phương tiện cho phép bạn thay đổi cấu hình phát trên cơ sở từng mục nội dung đa phương tiện. Trình xử lý được truyền một LoadRequestData và một PlaybackConfig, bạn nên trả về một cấu hình phát. Trình xử lý thông tin phát nội dung đa phương tiện sẽ được gọi trước khi mỗi mục bạn Truyền được tải. Nếu đã có URL của giấy phép cho mỗi nội dung, bạn có thể thay đổi các URL đó và hệ thống bảo vệ trước khi tải.

mediaPlaybackInfoHandler(loadRequest, playbackConfig) {
    if (!exoPlayerConfig) {
        return;
    }

    playbackConfig.licenseUrl = exoPlayerConfig.licenseUrl ?
            exoPlayerConfig.licenseUrl :
            undefined;
    playbackConfig.protectionSystem = exoPlayerConfig.protectionSystem ?
            exoPlayerConfig.protectionSystem :
            undefined;

    return playbackConfig;
}

Tài nguyên khác

Mỗi cách triển khai DRM là tuỳ chỉnh và mã này chỉ được cung cấp dưới dạng bản minh hoạ. Bạn nên tham khảo ý kiến của nhà cung cấp DRM để đảm bảo bạn đã triển khai DRM đúng cách trong các ứng dụng ExoPlayer và Cast của mình.

Trang web của ExoPlayer có tài liệu và thông báo mới nhất. Bạn có thể báo cáo các sự cố với ExoPlayer và tính năng tích hợp Cast tại kho lưu trữ GitHub của ExoPlayer.