/
media_ready_state_utils.js
37 lines (33 loc) · 1.07 KB
/
media_ready_state_utils.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/** @license
* Copyright 2016 Google LLC
* SPDX-License-Identifier: Apache-2.0
*/
goog.provide('shaka.util.MediaReadyState');
shaka.util.MediaReadyState = class {
/*
* @param {!HTMLMediaElement} mediaElement
* @param {HTMLMediaElement.ReadyState} readyState
* @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_.get(readyState);
eventManager.listenOnce(mediaElement, eventName, callback);
}
}
};
/**
* @const {!Map.<number, string>}
* @private
*/
shaka.util.MediaReadyState.READY_STATES_TO_EVENT_NAMES_ = new Map([
[HTMLMediaElement.HAVE_METADATA, 'loadedmetadata'],
[HTMLMediaElement.HAVE_CURRENT_DATA, 'loadeddata'],
[HTMLMediaElement.HAVE_FUTURE_DATA, 'canplay'],
[HTMLMediaElement.HAVE_ENOUGH_DATA, 'canplaythrough'],
]);