Respect Default Quality Setting

This commit is contained in:
Preston 2020-09-26 17:03:42 -04:00
parent cb6badd6c9
commit 81a2251bd8
1 changed files with 54 additions and 6 deletions

View File

@ -147,7 +147,7 @@ export default Vue.extend({
if (videoPlayer !== null) { if (videoPlayer !== null) {
if (!this.useDash) { if (!this.useDash) {
qualitySelector(videojs, { showQualitySelectionLabelInControlBar: true }) qualitySelector(videojs, { showQualitySelectionLabelInControlBar: true })
await this.determineDefaultQuality() await this.determineDefaultQualityLegacy()
} }
this.player = videojs(videoPlayer) this.player = videojs(videoPlayer)
@ -168,6 +168,9 @@ export default Vue.extend({
} }
this.player.httpSourceSelector() this.player.httpSourceSelector()
setTimeout(() => {
this.determineDefaultQualityDash()
}, 400)
} }
if (this.autoplayVideos) { if (this.autoplayVideos) {
@ -212,7 +215,7 @@ export default Vue.extend({
} }
}, },
determineDefaultQuality: function () { determineDefaultQualityLegacy: function () {
if (this.useDash) { if (this.useDash) {
return return
} }
@ -225,6 +228,12 @@ export default Vue.extend({
return '' return ''
} }
let defaultQuality = this.defaultQuality
if (defaultQuality === 'auto') {
defaultQuality = 720
}
let maxAvailableQuality = parseInt(this.sourceList[this.sourceList.length - 1].qualityLabel.replace(/p|k/, '')) let maxAvailableQuality = parseInt(this.sourceList[this.sourceList.length - 1].qualityLabel.replace(/p|k/, ''))
if (maxAvailableQuality === 4) { if (maxAvailableQuality === 4) {
@ -235,7 +244,7 @@ export default Vue.extend({
maxAvailableQuality = 4320 maxAvailableQuality = 4320
} }
if (maxAvailableQuality < this.defaultQuality) { if (maxAvailableQuality < defaultQuality) {
this.selectedDefaultQuality = this.sourceList[this.sourceList.length - 1].qualityLabel this.selectedDefaultQuality = this.sourceList[this.sourceList.length - 1].qualityLabel
} }
@ -250,7 +259,7 @@ export default Vue.extend({
qualityNumber = 4320 qualityNumber = 4320
} }
if (this.defaultQuality === qualityNumber) { if (defaultQuality === qualityNumber) {
this.selectedDefaultQuality = source.qualityLabel this.selectedDefaultQuality = source.qualityLabel
} }
@ -262,10 +271,10 @@ export default Vue.extend({
if (upperQualityNumber === 8) { if (upperQualityNumber === 8) {
upperQualityNumber = 4320 upperQualityNumber = 4320
} }
if (this.defaultQuality >= qualityNumber && this.defaultQuality < upperQualityNumber) { if (defaultQuality >= qualityNumber && defaultQuality < upperQualityNumber) {
this.selectedDefaultQuality = source.qualityLabel this.selectedDefaultQuality = source.qualityLabel
} }
} else if (qualityNumber === this.defaultQuality) { } else if (qualityNumber <= defaultQuality) {
this.selectedDefaultQuality = source.qualityLabel 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 () { enableDashFormat: function () {
if (this.dashSrc === null) { if (this.dashSrc === null) {
console.log('No dash format available.') console.log('No dash format available.')