关于 video 视频 autoplay 播放问题及解决方法
自动播放机制
自动播放机制其实就是会拦截自动播放的视频。
chrome、safari、firefox、edge 浏览器在某版本后都限制了video自动播放功能,原因为内部机制认为此视频为垃圾广告,和IOS系统一样,同时也是为客户体验度考虑,因此会限制自动播放功能。
解决办法
-
视频静音模式允许自动播放
-
以下几种模式下 非静音也可以自动播放
-
客户已和当前做了交互方式 :click tap 事件
-
客户将此网站添加到手机主桌面,就像App一样 采用PWA技术
-
媒体参与度达到一定值后,同样可以自动播放
-
PWA
描述: PWA 又为(Progressive Web App,PWA),是一个使用web平台技术构建的应用程序,采用各种Web 技术将浏览器页面实现APP应用化,当然手机应用如支持PWA,可以无需下载通过PWA Web APP 添加到客户主屏幕上,快速访问全屏体验,目前PWA已支持不同操作系统和设备上运行 。
特性:离线访问、推送消息、数据同步、实时更新。
手机无网络情况下,应用的启用动画特效等其实是使用离线访问实现。
媒体参与度
客户与媒体的交互度主要从客户的观看时间、交互行为、观看率、转换率来计算 - 浏览器内部算法。
错误代码示例
如只在video中加入autoplay 无任何错误提示 画面停留在第一帧。
- 不使用 autoplay,在页面加载后调用 video play 方法
- 使用 autoplay,同时调用 video play 方法才会出现错误信息
以下代码运行会提示:play() failed because the user didn't interact with the document
原因:提示为未与客户做交互。
解决:可以加入弹框提示,客户交互点击播放 - JS处代码 。
- 自定义 DIV 弹框、ElementPlus Dialog 均可,自行选择。
<template>
<video controls autoplay>
<source src="@/assets/audio/testVideo.mp4" type="video/mp4" />
</video>
</template>
<script lang="ts" setup>
import {
ref,
onMounted
} from "vue";
onMounted(() => {
// 此处不加 play 控制台不会出现报错
document.querySelector("video")!.play();
})
</script>
<style scoped lang="less">
</style>
静音自动播放示例
在 video 标签上添加 muted 属性
<template>
<video controls autoplay muted>
<source src="@/assets/audio/testVideo.mp4" type="video/mp4" />
</video>
</template>
<script lang="ts" setup>
import {
ref,
onMounted
} from "vue";
onMounted(() => {
document.querySelector("video")!.play();
})
</script>
<style scoped lang="less">
</style>
客户交互播放示例
此处仅实现交互方式,样式自行编写。
<template>
<button @click="play">开始播放</button>
<video controls autoplay>
<source src="@/assets/audio/testVideo.mp4" type="video/mp4" />
</video>
</template>
<script lang="ts" setup>
import {
ref,
onMounted
} from "vue";
const play = () => {
let video : HTMLVideoElement = document.querySelector("video")!;
// paused 播放状态
if(video.paused){
video.play();
}
}
</script>
<style scoped lang="less">
</style>
此帖查阅了相关资料,如若对PWA感兴趣此处可快速访问,如有问题请指出,欢迎讨论。