add autoplay audio if possible

This commit is contained in:
Pawel Urbanek 2023-03-24 16:17:05 +01:00
parent 50e5483661
commit 217cc451ea

View File

@ -229,7 +229,6 @@
private observer = new ResizeObserver(this.onResize.bind(this)) private observer = new ResizeObserver(this.onResize.bind(this))
private focused = false private focused = false
private fullscreen = false private fullscreen = false
private startsMuted = true
private mutedOverlay = true private mutedOverlay = true
get admin() { get admin() {
@ -361,7 +360,6 @@
onMutedChanged(muted: boolean) { onMutedChanged(muted: boolean) {
if (this._video && this._video.muted != muted) { if (this._video && this._video.muted != muted) {
this._video.muted = muted this._video.muted = muted
this.startsMuted = muted
if (!muted) { if (!muted) {
this.mutedOverlay = false this.mutedOverlay = false
@ -391,9 +389,21 @@
// would be thinking we're playing when we're not // would be thinking we're playing when we're not
try { try {
await this._video.play() await this._video.play()
} catch (err: any) {
if (!this._video.muted ) {
// video.play() can fail if audio is set due restrictive browsers autoplay policy
// retry with muted audio
try {
this.$accessor.video.setMuted(true)
this._video.muted = true
await this._video.play()
} catch (err: any) { } catch (err: any) {
this.$accessor.video.pause() this.$accessor.video.pause()
} }
} else {
this.$accessor.video.pause()
}
}
} }
if (this._video && !this._video.paused && !playing) { if (this._video && !this._video.paused && !playing) {
@ -431,10 +441,6 @@
this._video.addEventListener('canplaythrough', () => { this._video.addEventListener('canplaythrough', () => {
this.$accessor.video.setPlayable(true) this.$accessor.video.setPlayable(true)
if (this.autoplay) { if (this.autoplay) {
// start as muted due to restrictive browsers autoplay policy
if (this.startsMuted && (!document.hasFocus() || !this.$accessor.active)) {
this.$accessor.video.setMuted(true)
}
this.$nextTick(() => { this.$nextTick(() => {
this.$accessor.video.play() this.$accessor.video.play()