diff options
| author | saltycrys <73420320+saltycrys@users.noreply.github.com> | 2020-12-19 17:48:20 +0100 |
|---|---|---|
| committer | saltycrys <73420320+saltycrys@users.noreply.github.com> | 2020-12-19 18:37:41 +0100 |
| commit | eed78c960d01a6945403d82ec262087e9da0b8e3 (patch) | |
| tree | 63b2826685acbcdcf9701eb787ff80ab9de0f625 /assets/js | |
| parent | eea7ca9b72ac71560900b8d744287a97ac23c4eb (diff) | |
| download | invidious-eed78c960d01a6945403d82ec262087e9da0b8e3.tar.gz invidious-eed78c960d01a6945403d82ec262087e9da0b8e3.tar.bz2 invidious-eed78c960d01a6945403d82ec262087e9da0b8e3.zip | |
Improve DASH quality preference
Besides `auto`, `best` and `worst` it is now possible to select a target height.
If the target height is not available the closest lower height is selected.
Diffstat (limited to 'assets/js')
| -rw-r--r-- | assets/js/player.js | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/assets/js/player.js b/assets/js/player.js index 930680d6..fcba43d8 100644 --- a/assets/js/player.js +++ b/assets/js/player.js @@ -159,9 +159,26 @@ if (!video_data.params.listen && video_data.params.quality === 'dash') { player.ready(() => { player.on("loadedmetadata", () => { const qualityLevels = Array.from(player.qualityLevels()).sort((a, b) => a.height - b.height); - const targetQualityLevel = video_data.params.quality_dash == "best" ? qualityLevels.length - 1 : 0; + let targetQualityLevel; + switch (video_data.params.quality_dash) { + case "best": + targetQualityLevel = qualityLevels.length - 1; + break; + case "worst": + targetQualityLevel = 0; + break; + default: + const targetHeight = Number.parseInt(video_data.params.quality_dash, 10); + for (let i = 0; i < qualityLevels.length; i++) { + if (qualityLevels[i].height <= targetHeight) { + targetQualityLevel = i; + } else { + break; + } + } + } for (let i = 0; i < qualityLevels.length; i++) { - qualityLevels[i].enabled = (i == targetQualityLevel) + qualityLevels[i].enabled = (i == targetQualityLevel); } }); }); |
