From 81a2251bd8fe3158983816c7a6237e91cbfb879a Mon Sep 17 00:00:00 2001 From: Preston Date: Sat, 26 Sep 2020 17:03:42 -0400 Subject: [PATCH] Respect Default Quality Setting --- .../ft-video-player/ft-video-player.js | 60 +++++++++++++++++-- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/src/renderer/components/ft-video-player/ft-video-player.js b/src/renderer/components/ft-video-player/ft-video-player.js index e1b92212..0332ed9c 100644 --- a/src/renderer/components/ft-video-player/ft-video-player.js +++ b/src/renderer/components/ft-video-player/ft-video-player.js @@ -147,7 +147,7 @@ export default Vue.extend({ if (videoPlayer !== null) { if (!this.useDash) { qualitySelector(videojs, { showQualitySelectionLabelInControlBar: true }) - await this.determineDefaultQuality() + await this.determineDefaultQualityLegacy() } this.player = videojs(videoPlayer) @@ -168,6 +168,9 @@ export default Vue.extend({ } this.player.httpSourceSelector() + setTimeout(() => { + this.determineDefaultQualityDash() + }, 400) } if (this.autoplayVideos) { @@ -212,7 +215,7 @@ export default Vue.extend({ } }, - determineDefaultQuality: function () { + determineDefaultQualityLegacy: function () { if (this.useDash) { return } @@ -225,6 +228,12 @@ export default Vue.extend({ return '' } + let defaultQuality = this.defaultQuality + + if (defaultQuality === 'auto') { + defaultQuality = 720 + } + let maxAvailableQuality = parseInt(this.sourceList[this.sourceList.length - 1].qualityLabel.replace(/p|k/, '')) if (maxAvailableQuality === 4) { @@ -235,7 +244,7 @@ export default Vue.extend({ maxAvailableQuality = 4320 } - if (maxAvailableQuality < this.defaultQuality) { + if (maxAvailableQuality < defaultQuality) { this.selectedDefaultQuality = this.sourceList[this.sourceList.length - 1].qualityLabel } @@ -250,7 +259,7 @@ export default Vue.extend({ qualityNumber = 4320 } - if (this.defaultQuality === qualityNumber) { + if (defaultQuality === qualityNumber) { this.selectedDefaultQuality = source.qualityLabel } @@ -262,10 +271,10 @@ export default Vue.extend({ if (upperQualityNumber === 8) { upperQualityNumber = 4320 } - if (this.defaultQuality >= qualityNumber && this.defaultQuality < upperQualityNumber) { + if (defaultQuality >= qualityNumber && defaultQuality < upperQualityNumber) { this.selectedDefaultQuality = source.qualityLabel } - } else if (qualityNumber === this.defaultQuality) { + } else if (qualityNumber <= defaultQuality) { this.selectedDefaultQuality = source.qualityLabel } }) @@ -275,6 +284,45 @@ export default Vue.extend({ } }, + determineDefaultQualityDash: function () { + if (this.defaultQuality === 'auto') { + return + } + + this.player.qualityLevels().levels_.sort((a, b) => { + return a.height - b.height + }).forEach((ql, index, arr) => { + const height = ql.height + const width = ql.width + const quality = width < height ? width : height + let upperLevel = null + + if (index < arr.length - 1) { + upperLevel = arr[index + 1] + } + + if (this.defaultQuality === quality) { + ql.enabled = true + } else if (upperLevel !== null) { + const upperHeight = upperLevel.height + const upperWidth = upperLevel.width + const upperQuality = upperWidth < upperHeight ? upperWidth : upperHeight + + if (this.defaultQuality >= quality && this.defaultQuality < upperQuality) { + ql.enabled = true + } else { + ql.enabled = false + } + } else if (index === 0 && quality > this.defaultQuality) { + ql.enabled = true + } else if (index === (arr.length - 1) && quality < this.defaultQuality) { + ql.enabled = true + } else { + ql.enabled = false + } + }) + }, + enableDashFormat: function () { if (this.dashSrc === null) { console.log('No dash format available.')