aboutsummaryrefslogtreecommitdiffstats
path: root/src/js
diff options
context:
space:
mode:
authorSom Meaden <som@theprojectsomething.com>2020-04-23 17:01:49 +1000
committerSom Meaden <som@theprojectsomething.com>2020-04-23 17:01:49 +1000
commit40f06e0b4cd9df8daa11e1dec1f3f51fc63424b2 (patch)
treebfd3bd24ce9cdedb33b39d881f66417ac0b80f04 /src/js
parent6f1366bd198e52ea17ead09c0e593572c2f846db (diff)
downloadplyr-40f06e0b4cd9df8daa11e1dec1f3f51fc63424b2.tar.lz
plyr-40f06e0b4cd9df8daa11e1dec1f3f51fc63424b2.tar.xz
plyr-40f06e0b4cd9df8daa11e1dec1f3f51fc63424b2.zip
This commit addresses preloading TextTracks as outlined in feature request #1791
These changes bring Plyr captions download behaviour in line with that of the default video element in major browsers. Specifically text tracks only download as they are required for display. Previously all text tracks would download when the Plyr instance was instantiated - which could become an issue when e.g. many translations are available. For a track to be downloaded it must either be the default track, the active track when captions are toggled on, or selected from the captions menu.
Diffstat (limited to 'src/js')
-rw-r--r--src/js/captions.js14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/js/captions.js b/src/js/captions.js
index 04da4651..60381f88 100644
--- a/src/js/captions.js
+++ b/src/js/captions.js
@@ -133,8 +133,12 @@ const captions = {
});
// Turn off native caption rendering to avoid double captions
+ // Note: mode='hidden' forces a track to download. To ensure every track
+ // isn't downloaded at once, only 'showing' tracks should be reassigned
// eslint-disable-next-line no-param-reassign
- track.mode = 'hidden';
+ if (track.mode === 'showing') {
+ track.mode = 'hidden';
+ }
// Add event listener for cue changes
on.call(this, track, 'cuechange', () => captions.updateCues.call(this));
@@ -211,6 +215,14 @@ const captions = {
// Trigger event (not used internally)
triggerEvent.call(this, this.media, active ? 'captionsenabled' : 'captionsdisabled');
}
+
+ // Wait for the call stack to clear before setting mode='hidden'
+ // on the active track - forcing the browser to download it
+ setTimeout(() => {
+ if (active && this.captions.toggled) {
+ this.captions.currentTrackNode.mode = 'hidden';
+ }
+ });
},
// Set captions by track index