Setting loudness to default volume in new videos (#3203)

* Made changes as suggested.

* Made player set volume to user default if it was muted by dragging volume slider to zero. Volume and muted are kept track of seperately and both are set on player with respect to how it was set for previous video

* added comments

* fixed

* fixed

* Changed comments to be more accurate.
This commit is contained in:
predystopic-dev 2023-03-08 23:52:45 +05:30 committed by GitHub
parent 436154b615
commit 3a904b5f83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 3 deletions

View File

@ -81,6 +81,7 @@ export default defineComponent({
id: '',
powerSaveBlocker: null,
volume: 1,
muted: false,
player: null,
useDash: false,
useHls: false,
@ -305,11 +306,18 @@ export default defineComponent({
},
mounted: function () {
const volume = sessionStorage.getItem('volume')
const muted = sessionStorage.getItem('muted')
if (volume !== null) {
this.volume = volume
}
if (muted !== null) {
// as sessionStorage stores string values which are truthy by default so we must check with 'true'
// otherwise 'false' will be returned as true as well
this.muted = (muted === 'true')
}
this.dataSetup.playbackRates = this.playbackRates
this.createFullWindowButton()
@ -390,6 +398,7 @@ export default defineComponent({
})
this.player.volume(this.volume)
this.player.muted(this.muted)
this.player.playbackRate(this.defaultPlayback)
this.player.textTrackSettings.setValues(this.defaultCaptionSettings)
// Remove big play button
@ -699,10 +708,21 @@ export default defineComponent({
},
updateVolume: function (_event) {
// 0 means muted
// https://docs.videojs.com/html5#volume
const volume = this.player.muted() ? 0 : this.player.volume()
sessionStorage.setItem('volume', volume)
if (sessionStorage.getItem('muted') === 'false' && this.player.volume() === 0) {
// If video is muted by dragging volume slider, it doesn't change 'muted' in sessionStorage to true
// hence compare it with 'false' and set volume to defaultVolume.
const volume = parseFloat(sessionStorage.getItem('defaultVolume'))
const muted = true
sessionStorage.setItem('volume', volume)
sessionStorage.setItem('muted', muted)
} else {
// If volume isn't muted by dragging the slider, muted and volume values are carried over to next video.
const volume = this.player.volume()
const muted = this.player.muted()
sessionStorage.setItem('volume', volume)
sessionStorage.setItem('muted', muted)
}
},
mouseScrollVolume: function (event) {

View File

@ -349,6 +349,8 @@ const stateWithSideEffects = {
defaultValue: 1,
sideEffectsHandler: (_, value) => {
sessionStorage.setItem('volume', value)
value === 0 ? sessionStorage.setItem('muted', 'true') : sessionStorage.setItem('muted', 'false')
sessionStorage.setItem('defaultVolume', value)
}
},