diff --git a/docs/tutorials/fairplay.md b/docs/tutorials/fairplay.md index b771ce63af..8bc8e5c907 100644 --- a/docs/tutorials/fairplay.md +++ b/docs/tutorials/fairplay.md @@ -217,3 +217,18 @@ player.getNetworkingEngine() player.configure('drm.initDataTransform', FairPlayUtils.conaxInitDataTransform); ``` + +#### ExpressPlay (legacy Apple Media Keys) + +For integration with ExpressPlay the following can be used: + +```js +shaka.polyfill.PatchedMediaKeysApple.install(); +const FairPlayUtils = shaka.util.FairPlayUtils; +player.getNetworkingEngine() + .registerRequestFilter(FairPlayUtils.expressplayFairPlayRequest); +player.getNetworkingEngine() + .registerResponseFilter(FairPlayUtils.commonFairPlayResponse); +player.configure('drm.initDataTransform', + FairPlayUtils.expressplayInitDataTransform); +``` diff --git a/lib/util/fairplay_utils.js b/lib/util/fairplay_utils.js index 9e114b0627..4ee6b11b5a 100644 --- a/lib/util/fairplay_utils.js +++ b/lib/util/fairplay_utils.js @@ -133,14 +133,14 @@ shaka.util.FairPlayUtils = class { } /** - * Verimatrix initDataTransform configuration. + * Basic initDataTransform configuration. * * @param {!Uint8Array} initData * @param {string} initDataType * @param {?shaka.extern.DrmInfo} drmInfo - * @export + * @private */ - static verimatrixInitDataTransform(initData, initDataType, drmInfo) { + static basicInitDataTransform_(initData, initDataType, drmInfo) { if (initDataType !== 'skd') { return initData; } @@ -152,6 +152,19 @@ shaka.util.FairPlayUtils = class { return FairPlayUtils.initDataTransform(initData, contentId, cert); } + /** + * Verimatrix initDataTransform configuration. + * + * @param {!Uint8Array} initData + * @param {string} initDataType + * @param {?shaka.extern.DrmInfo} drmInfo + * @export + */ + static verimatrixInitDataTransform(initData, initDataType, drmInfo) { + return shaka.util.FairPlayUtils.basicInitDataTransform_( + initData, initDataType, drmInfo); + } + /** * EZDRM initDataTransform configuration. * @@ -202,6 +215,19 @@ shaka.util.FairPlayUtils = class { return FairPlayUtils.initDataTransform(initData, contentId, cert); } + /** + * ExpressPlay initDataTransform configuration. + * + * @param {!Uint8Array} initData + * @param {string} initDataType + * @param {?shaka.extern.DrmInfo} drmInfo + * @export + */ + static expressplayInitDataTransform(initData, initDataType, drmInfo) { + return shaka.util.FairPlayUtils.basicInitDataTransform_( + initData, initDataType, drmInfo); + } + /** * Verimatrix FairPlay request. * @@ -221,19 +247,30 @@ shaka.util.FairPlayUtils = class { } /** - * EZDRM FairPlay request. + * Set content-type to application/octet-stream in a FairPlay request. * * @param {shaka.net.NetworkingEngine.RequestType} type * @param {shaka.extern.Request} request - * @export + * @private */ - static ezdrmFairPlayRequest(type, request) { + static octetStreamFairPlayRequest_(type, request) { if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) { return; } request.headers['Content-Type'] = 'application/octet-stream'; } + /** + * EZDRM FairPlay request. + * + * @param {shaka.net.NetworkingEngine.RequestType} type + * @param {shaka.extern.Request} request + * @export + */ + static ezdrmFairPlayRequest(type, request) { + shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request); + } + /** * Conax FairPlay request. * @@ -242,10 +279,18 @@ shaka.util.FairPlayUtils = class { * @export */ static conaxFairPlayRequest(type, request) { - if (type !== shaka.net.NetworkingEngine.RequestType.LICENSE) { - return; - } - request.headers['Content-Type'] = 'application/octet-stream'; + shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request); + } + + /** + * ExpressPlay FairPlay request. + * + * @param {shaka.net.NetworkingEngine.RequestType} type + * @param {shaka.extern.Request} request + * @export + */ + static expressplayFairPlayRequest(type, request) { + shaka.util.FairPlayUtils.octetStreamFairPlayRequest_(type, request); } /**