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 Cast và ExoPlayer. 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 LoadRequestData
và 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 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ữ.