mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-16 16:16:40 +03:00
698d4e5694
It is sometimes useful to load Shaka Player in nodejs, particularly a debug build, to access some internal part of Shaka Player in a nodejs script. For example, I am currently working on an MP4 box transformation for Shaka, but I am doing the R&D in node on the command line rather than in a browser. For this setup to work, Shaka should not refer to browser-specific classes and APIs at load-time. Thankfully, shaka.util.Lazy gives us an easy way to lazy-load those things so that they are not needed at load-time at all. This change uses shaka.util.Lazy to defer a reference to HTMLMediaElement in shaka.util.MediaReadyState. Tangentially related to #2759 Change-Id: I376d2a81cb45e7cbc94be0a88deab3abb08001bf
44 lines
1.3 KiB
JavaScript
44 lines
1.3 KiB
JavaScript
/*! @license
|
|
* Shaka Player
|
|
* Copyright 2016 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
goog.provide('shaka.util.MediaReadyState');
|
|
|
|
goog.require('shaka.util.EventManager');
|
|
goog.require('shaka.util.Lazy');
|
|
|
|
|
|
shaka.util.MediaReadyState = class {
|
|
/**
|
|
* @param {!HTMLMediaElement} mediaElement
|
|
* @param {number} readyState
|
|
* @param {shaka.util.EventManager} eventManager
|
|
* @param {function()} callback
|
|
*/
|
|
static waitForReadyState(mediaElement, readyState, eventManager, callback) {
|
|
if (readyState == HTMLMediaElement.HAVE_NOTHING ||
|
|
mediaElement.readyState >= readyState) {
|
|
callback();
|
|
} else {
|
|
const MediaReadyState = shaka.util.MediaReadyState;
|
|
const eventName =
|
|
MediaReadyState.READY_STATES_TO_EVENT_NAMES_.value().get(readyState);
|
|
eventManager.listenOnce(mediaElement, eventName, callback);
|
|
}
|
|
}
|
|
};
|
|
|
|
/**
|
|
* @const {!shaka.util.Lazy.<!Map.<number, string>>}
|
|
* @private
|
|
*/
|
|
shaka.util.MediaReadyState.READY_STATES_TO_EVENT_NAMES_ =
|
|
new shaka.util.Lazy(() => new Map([
|
|
[HTMLMediaElement.HAVE_METADATA, 'loadedmetadata'],
|
|
[HTMLMediaElement.HAVE_CURRENT_DATA, 'loadeddata'],
|
|
[HTMLMediaElement.HAVE_FUTURE_DATA, 'canplay'],
|
|
[HTMLMediaElement.HAVE_ENOUGH_DATA, 'canplaythrough'],
|
|
]));
|