Constructor
new DrmEngine(networkingEnginenon-null, onError, onKeyStatus, onExpirationUpdated)
Parameters:
Name | Type | Description |
---|---|---|
networkingEngine |
shaka.net.NetworkingEngine | |
onError |
function(!shaka.util.Error) | Called when an error occurs. |
onKeyStatus |
function(!Object.<string, string>) | Called when key status changes. Argument is a map of hex key IDs to statuses. |
onExpirationUpdated |
function(string, number) |
- Implements:
- Source:
Members
-
(private, non-null) activeSessions_ :Array.<shaka.media.DrmEngine.ActiveSession>
-
Type:
- Source:
-
(private, non-null) allSessionsLoaded_ :shaka.util.PublicPromise
-
Type:
- Source:
-
(private, nullable) config_ :shakaExtern.DrmConfiguration
-
Type:
- Source:
-
(private, nullable) currentDrmInfo_ :shakaExtern.DrmInfo
-
Type:
- Source:
-
(private) destroyed_ :boolean
-
Type:
- boolean
- Source:
-
(private) eventManager_ :shaka.util.EventManager
-
Type:
- Source:
-
(private, nullable) expirationInterval_ :number
-
Type:
- number
- Source:
-
(private) initialized_ :boolean
-
Type:
- boolean
- Source:
-
(private) initialRequestsSent_ :boolean
-
Type:
- boolean
- Source:
-
(private) isOffline_ :boolean
-
Type:
- boolean
- Source:
-
(private, non-null) keyStatusByKeyId_ :Object.<string, string>
-
Type:
- Object.<string, string>
- Source:
-
(private) keyStatusTimer_ :shaka.util.Timer
-
Type:
- Source:
-
(private, non-null) mediaKeyMessageEvents_ :Array.<!MediaKeyMessageEvent>
-
Type:
- Array.<!MediaKeyMessageEvent>
- Source:
-
(private) mediaKeys_ :MediaKeys
-
Type:
- MediaKeys
- Source:
-
(private) networkingEngine_ :shaka.net.NetworkingEngine
-
Type:
- Source:
-
(private, non-null) offlineSessionIds_ :Array.<string>
-
Type:
- Array.<string>
- Source:
-
(private, nullable) onError_ :?function(!shaka.util.Error)
-
Type:
- ?function(!shaka.util.Error)
- Source:
-
(private, nullable) onExpirationUpdated_ :?function(string, number)
-
Type:
- ?function(string, number)
- Source:
-
(private, nullable) onKeyStatus_ :?function(!Object.<string, string>)
-
Type:
- ?function(!Object.<string, string>)
- Source:
-
(private) supportedTypes_ :Array.<string>
-
Type:
- Array.<string>
- Source:
-
(private) video_ :HTMLMediaElement
-
Type:
- HTMLMediaElement
- Source:
Methods
-
(static) areDrmCompatible(drms1non-null, drms2non-null) → {boolean}
-
Checks if two DrmInfos can be decrypted using the same key system. Clear content is considered compatible with every key system.
Parameters:
Name Type Description drms1
Array.<!shakaExtern.DrmInfo> drms2
Array.<!shakaExtern.DrmInfo> - Source:
Returns:
- Type
- boolean
-
(static) getCommonDrmInfos(drms1non-null, drms2non-null) → (non-null) {Array.<!shakaExtern.DrmInfo>}
-
Returns an array of drm infos that are present in both input arrays. If one of the arrays is empty, returns the other one since clear content is considered compatible with every drm info.
Parameters:
Name Type Description drms1
Array.<!shakaExtern.DrmInfo> drms2
Array.<!shakaExtern.DrmInfo> - Source:
Returns:
- Type
- Array.<!shakaExtern.DrmInfo>
-
(static) isBrowserSupported() → {boolean}
-
Returns true if the browser has recent EME APIs.
- Source:
Returns:
- Type
- boolean
-
(static) probeSupport() → (non-null) {Promise.<!Object.<string, ?shakaExtern.DrmSupportType>>}
-
Returns a Promise to a map of EME support for well-known key systems.
- Source:
Returns:
- Type
- Promise.<!Object.<string, ?shakaExtern.DrmSupportType>>
-
attach(video) → (non-null) {Promise}
-
Attach MediaKeys to the video element and start processing events.
Parameters:
Name Type Description video
HTMLMediaElement - Source:
Returns:
- Type
- Promise
-
configure(config)
-
Called by the Player to provide an updated configuration any time it changes. Must be called at least once before init().
Parameters:
Name Type Description config
shakaExtern.DrmConfiguration - Source:
-
(private) configureClearKey_() → (nullable) {shakaExtern.DrmInfo}
-
Create a DrmInfo using configured clear keys. The server URI will be a data URI which decodes to a clearkey license.
- Source:
- See:
Returns:
or null if clear keys are not configured.- Type
- shakaExtern.DrmInfo
-
(private) createCurrentDrmInfo_(keySystem, config, drmInfosnon-null)
-
Creates a DrmInfo object describing the settings used to initialize the engine.
Parameters:
Name Type Description keySystem
string config
MediaKeySystemConfiguration drmInfos
Array.<shakaExtern.DrmInfo> - Source:
-
createOrLoad() → (non-null) {Promise}
-
Creates the sessions for the init data and waits for them to become ready.
- Source:
Returns:
- Type
- Promise
-
(private) createTemporarySession_(initDataType, initDatanon-null)
-
Parameters:
Name Type Description initDataType
string initData
Uint8Array - Source:
-
(private) delayLicenseRequest_() → {boolean}
-
- Source:
Returns:
- Type
- boolean
-
destroy() → (non-null) {Promise}
-
Destroys the object, releasing all resources and shutting down all operations. Returns a Promise which is resolved when destruction is complete. This Promise should never be rejected.
- Implements:
- Source:
Returns:
- Type
- Promise
-
(private) fillInDrmInfoDefaults_(drmInfo)
-
Use this.config_ to fill in missing values in drmInfo.
Parameters:
Name Type Description drmInfo
shakaExtern.DrmInfo - Source:
-
getDrmInfo() → (nullable) {shakaExtern.DrmInfo}
-
Returns the DrmInfo that was used to initialize the current key system.
- Source:
Returns:
- Type
- shakaExtern.DrmInfo
-
getExpiration() → {number}
-
Returns the next expiration time, or Infinity.
- Source:
Returns:
- Type
- number
-
getSessionIds() → (non-null) {Array.<string>}
-
Returns the ID of the sessions currently active.
- Source:
Returns:
- Type
- Array.<string>
-
getSupportedTypes() → {Array.<string>}
-
Returns an array of the media types supported by the current key system. These will be full mime types (e.g. 'video/webm; codecs="vp8"').
- Source:
Returns:
- Type
- Array.<string>
-
init(manifestnon-null, offline) → (non-null) {Promise}
-
Negotiate for a key system and set up MediaKeys.
Parameters:
Name Type Description manifest
shakaExtern.Manifest The manifest is read for MIME type and DRM information to query EME. If the 'clearKeys' configuration is used, the manifest will be modified to force the use of Clear Key. offline
boolean True if we are storing or loading offline content. - Source:
Returns:
Resolved if/when a key system has been chosen.- Type
- Promise
-
initialized() → {boolean}
-
- Source:
Returns:
- Type
- boolean
-
isSupportedByKeySystem(variantnon-null) → {boolean}
-
Checks if a variant is compatible with the key system.
Parameters:
Name Type Description variant
shakaExtern.Variant - Source:
Returns:
- Type
- boolean
-
keySystem() → {string}
-
- Source:
Returns:
- Type
- string
-
(private) loadOfflineSession_(sessionId) → (non-null) {Promise.<MediaKeySession>}
-
Parameters:
Name Type Description sessionId
string - Source:
Returns:
- Type
- Promise.<MediaKeySession>
-
(private) onEncrypted_(eventnon-null)
-
Parameters:
Name Type Description event
MediaEncryptedEvent - Source:
-
(private) onKeyStatusesChange_(eventnon-null)
-
Parameters:
Name Type Description event
Event - Source:
-
(private) onPlay_()
-
- Source:
-
(private) onSessionMessage_(eventnon-null)
-
Parameters:
Name Type Description event
MediaKeyMessageEvent - Source:
-
(private) pollExpiration_()
-
Called in an interval timer to poll the expiration times of the sessions. We don't get an event from EME when the expiration updates, so we poll it so we can fire an event when it happens.
- Source:
-
(private) prepareMediaKeyConfigs_(manifestnon-null, offline, configsByKeySystemnon-null, keySystemsInOrdernon-null)
-
Parameters:
Name Type Description manifest
shakaExtern.Manifest offline
boolean True if we are storing or loading offline content. configsByKeySystem
Object.<string, MediaKeySystemConfiguration> (Output parameter.) A dictionary of configs, indexed by key system. keySystemsInOrder
Array.<string> (Output parameter.) A list of key systems in the order in which we encounter them. -
(private) processDrmInfos_(drmInfosnon-null, licenseServersnon-null, serverCertsnon-null, initDatasnon-null, keyIdsnon-null)
-
Extract license server, server cert, and init data from DrmInfos, taking care to eliminate duplicates.
Parameters:
Name Type Description drmInfos
Array.<shakaExtern.DrmInfo> licenseServers
Array.<string> serverCerts
Array.<!Uint8Array> initDatas
Array.<!shakaExtern.InitDataOverride> keyIds
Array.<string> - Source:
-
(private) processKeyStatusChanges_()
-
- Source:
-
(private) queryMediaKeys_(configsByKeySystemnon-null, keySystemsInOrdernon-null) → (non-null) {Promise}
-
Parameters:
Name Type Description configsByKeySystem
Object.<string, MediaKeySystemConfiguration> A dictionary of configs, indexed by key system. keySystemsInOrder
Array.<string> A list of key systems in the order in which we should query them. On a browser which supports multiple key systems, the order may indicate a real preference for the application. - Source:
Returns:
Resolved if/when a key system has been chosen.- Type
- Promise
-
removeSessions(sessionsnon-null) → (non-null) {Promise}
-
Removes the given offline sessions and deletes their data. Must call init() before this. This will wait until the 'license-release' message is handled and the resulting Promise will be rejected if there is an error with that.
Parameters:
Name Type Description sessions
Array.<string> - Source:
Returns:
- Type
- Promise
-
(private) sendLicenseRequest_(eventnon-null)
-
Sends a license request.
Parameters:
Name Type Description event
MediaKeyMessageEvent - Source:
-
(private) unpackPlayReadyRequest_(request)
-
Unpack PlayReady license requests. Modifies the request object.
Parameters:
Name Type Description request
shakaExtern.Request - Source:
Type Definitions
-
ActiveSession
-
A record to track sessions and suppress duplicate init data.
Type:
- {loaded: boolean, initData: Uint8Array, session: !MediaKeySession, oldExpiration: number, updatePromise: shaka.util.PublicPromise}
Properties:
Name Type Description loaded
boolean True once the key status has been updated (to a non-pending state). This does not mean the session is 'usable'. initData
Uint8Array The init data used to create the session. session
MediaKeySession The session object. oldExpiration
number The expiration of the session on the last check. This is used to fire an event when it changes. updatePromise
shaka.util.PublicPromise An optional Promise that will be resolved/rejected on the next update() call. This is used to track the 'license-release' message when calling remove(). - Source: