Skip to content

Commit

Permalink
feat: Add ExpressPlay FairPlay util (shaka-project#4926)
Browse files Browse the repository at this point in the history
  • Loading branch information
avelad committed Jan 24, 2023
1 parent 6a48cfe commit 7fa40fd
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 10 deletions.
15 changes: 15 additions & 0 deletions docs/tutorials/fairplay.md
Expand Up @@ -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);
```
65 changes: 55 additions & 10 deletions lib/util/fairplay_utils.js
Expand Up @@ -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;
}
Expand All @@ -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.
*
Expand Down Expand Up @@ -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.
*
Expand All @@ -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.
*
Expand All @@ -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);
}

/**
Expand Down

0 comments on commit 7fa40fd

Please sign in to comment.