diff --git a/src/components/VapMp4Player.vue b/src/components/VapMp4Player.vue index 93e0fb8..1f493c2 100644 --- a/src/components/VapMp4Player.vue +++ b/src/components/VapMp4Player.vue @@ -96,6 +96,27 @@ let playToken = 0 const teleportToBody = computed(() => props.mode === 'overlay') const resolvedSrc = computed(() => resolveProtectedAssetUrl(props.src)) +function enforceVideoPlaybackAttributes(video, shouldMute) { + if (!video) { + return + } + + video.playsInline = true + video.setAttribute('playsinline', '') + video.setAttribute('webkit-playsinline', '') + video.setAttribute('x5-playsinline', '') + + if (shouldMute) { + video.muted = true + video.defaultMuted = true + video.volume = 0 + video.setAttribute('muted', '') + } else { + video.defaultMuted = false + video.removeAttribute('muted') + } +} + function destroyPlayer() { if (player) { player.destroy() @@ -177,6 +198,14 @@ async function startPlay() { ...props.vapData, }) + enforceVideoPlaybackAttributes(player?.video, props.mute) + player?.video?.addEventListener('loadedmetadata', () => { + enforceVideoPlaybackAttributes(player?.video, props.mute) + }) + player?.video?.addEventListener('canplay', () => { + enforceVideoPlaybackAttributes(player?.video, props.mute) + }) + player.on('ended', handleEnded) player.on('playing', () => { loading.value = false