UNPKG

@playkit-js/playkit-js-dash

Version:

[![Build Status](https://github.com/kaltura/playkit-js-dash/actions/workflows/run_canary_full_flow.yaml/badge.svg)](https://github.com/kaltura/playkit-js-dash/actions/workflows/run_canary_full_flow.yaml) [![code style: prettier](https://img.shields.io/bad

58 lines (52 loc) 2.07 kB
import { IDrmProtocol, Env, DrmScheme, getLogger, PKDrmConfigObject } from '@playkit-js/playkit-js'; const Widevine: IDrmProtocol = class Widevine { public static _logger = getLogger('Widevine'); /** * Widevine is the configure key system. * @param {Array<Object>} drmData - The drm data. * @param {PKDrmConfigObject} drmConfig - The drm config. * @return {boolean} - Whether Widevine is the configure key system. */ public static isConfigured(drmData: Array<any>, drmConfig: PKDrmConfigObject): boolean { return DrmScheme.WIDEVINE === drmConfig.keySystem && !!drmData.find(drmEntry => drmEntry.scheme === drmConfig.keySystem); } /** * Widevine playback supports in case 2 conditions are met: * 1. The environment supports Widevine playback. * 2. The drm data of the source object contains entry with Widevine scheme. * @param {Array<Object>} drmData - The drm data to check. * @return {boolean} - Whether Widevine can be play on the current environment. */ public static canPlayDrm(drmData: Array<any>): boolean { Widevine._logger.debug('Can play DRM scheme of: ' + DrmScheme.WIDEVINE); return !!drmData.find(drmEntry => drmEntry.scheme === DrmScheme.WIDEVINE); } /** * Sets the Widevine playback. * @param {Object} config - The shaka player config. * @param {Array<Object>} drmData - The drm data. * @returns {void} */ public static setDrmPlayback(config: any, drmData: Array<any>): void { Widevine._logger.debug('Sets drm playback'); const browser = Env.browser.name; const wwDrmEntry = drmData.find(drmEntry => drmEntry.scheme === DrmScheme.WIDEVINE); if (wwDrmEntry) { config.drm = { servers: { [DrmScheme.WIDEVINE]: wwDrmEntry.licenseUrl }, advanced: {} }; if (browser === 'Chrome') { config.drm.advanced = { [DrmScheme.WIDEVINE]: { videoRobustness: 'SW_SECURE_CRYPTO', audioRobustness: 'SW_SECURE_CRYPTO' } }; } } } }; export {Widevine};