Tích hợp ExoPlayer

Tài liệu này cung cấp thông tin tổng quan về việc xếp hàng đợi và tích hợp DRM của Google.

Các tính năng nâng cao DRM

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

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

Cung cấp cấu hình DRM

Ứng dụng minh hoạ ExoPlayer chứa mã mẫu cho biết cách cung cấp DRM cấu hình như một phần của MediaItem. Bốn tùy 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 cấp phép – URL dùng để lấy giấy phép.
  • Hệ thống bảo vệ – cơ chế bảo vệ theo DRM dùng để bảo vệ nội dung, ví dụ: Widevine.

Cấu hình DRM mà bạn cung cấp cho ExoPlayer sẽ được gửi đến bộ thu ứng dụng dưới dạng một thuộc tính trong customData trên 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 exoPlayerConfig phù hợ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 dùng, bạn có thể cần định cấu hình licenseRequestHandler và một mediaPlaybackInfoHandler. 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. Chiến lược phát hành đĩa đơ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 mỗi phần nội dung phải sử dụng URL máy chủ cấp phép khác.

Để chụp bản sao của ExoPlayerConfig từ mỗi đối tượng yêu cầu tải, hãy tạo 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ý trình xử lý của bạn trước khi khởi động tính nă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});

Trình chặn yêu cầu tải

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 Truyền yêu cầu tải trước khi CAF cố gắng tải một mục nội dung đa phương tiện. Quan trọng là được gọi trước 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.

Trình chặn yêu cầu tải được truyền LoadRequestData đối tượng 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 của bạn và trình xử lý thông tin phát nội dung nghe nhì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 Web yêu cầu HTTPS Người nhận gửi đến máy chủ cấp phép của bạn. Trình xử lý nhận được một NetworkRequestInfo mà sau đó bạn có thể sử dụng để 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.

Ví dụ: nếu bạn cần thêm tiêu đề tuỳ chỉnh vào yêu cầu giấy 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 nghe nhìn

Trình xử lý thông tin phát nội dung nghe nhìn cho phép bạn thay đổi chế độ phát nội dung cấu hình trên cơ sở từng mục nội dung đa phương tiện. Trình xử lý nhận được một LoadRequestDataPlaybackConfig, 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 nghe nhìn sẽ được gọi trước khi tải mỗi mục bạn Truyền. Nếu bạn có URL giấy phép cho mỗi nội dung, có thể thay đổi chúng 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 được cung cấp làm bản minh hoạ . Bạn nên tham khảo ý kiến nhà cung cấp DRM của mình để đảm bảo bạn có triển khai DRM trong các ứng dụng ExoPlayer và Cast của mình.

Trang web của ExoPlayer có tài liệu cập nhật và thông báo. Các vấn đề với ExoPlayer và quá trình tích hợp Cast của nó có thể được báo cáo tại trang GitHub của ExoPlayer kho lưu trữ.