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 098c3d43be75..3bc85f0762d0 100644 --- a/src/renderer/components/ft-video-player/ft-video-player.js +++ b/src/renderer/components/ft-video-player/ft-video-player.js @@ -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) { diff --git a/src/renderer/store/modules/settings.js b/src/renderer/store/modules/settings.js index 0476e182ef2e..8c02127232e6 100644 --- a/src/renderer/store/modules/settings.js +++ b/src/renderer/store/modules/settings.js @@ -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) } },