uni-app H5 uni.createVideoContext nextTick 控制视频自动播放并且在onReady和onshow重新加载了视频上下文,电脑端正常,安卓页面刷新不生效
uni-app H5 uni.createVideoContext nextTick 控制视频自动播放并且在onReady和onshow重新加载了视频上下文,电脑端正常,安卓页面刷新不生效
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
Windows | 10 | HBuilderX |
产品分类:uniapp/H5
浏览器平台:Chrome
浏览器版本:22.3.3087.64
示例代码:
```html
<video :id="videoId" style="width: 100%;" object-fit="fill" :custom-cache="false" :autoplay="false" :enable-progress-gesture="false"
loop="false" :src="videoPath"></video>
//视频格式是 mp4
let videoId = ref('');
let videoContext = ref(null);
//【生命周期】页面加载完成
onReady(() => {
videoId.value = 'videoPlayer' + Math.round(Math.random()*(3-1)+1 )
videoContext.value = uni.createVideoContext(videoId.value);
})
onLoad(()=>{
if (videoContext.value) {
videoContext.value.play();
} else{
videoId.value = 'videoPlayer' + Math.round(Math.random()*(3-1)+1 )
videoContext.value = uni.createVideoContext(videoId.value);
nextTick(() =>{
videoContext.value.play();
})
}
})
onShow(()=>{
if (videoContext.value) {
videoContext.value.play();
} else{
videoId.value = 'videoPlayer' + Math.round(Math.random()*(3-1)+1 )
videoContext.value = uni.createVideoContext(videoId.value);
nextTick(() =>{
videoContext.value.play();
})
}
})
操作步骤:
- 在电脑端正常,在安卓手机上刷新就不生效了。
预期结果:
- H5 微信公众号 视频进入页面时和刷新页面都可以实现视频自动播放效果,而且是有声音播放。
实际结果:
- 视频进入页面时可以实现视频自动播放效果,而且是有声音播放,但是页面一刷新视频就没有播放,声音也没有。
bug描述:
- H5 uni.createVideoContext nextTick 控制视频自动播放并且在onReady和onshow重新加载了视频上下文,电脑端自动播放正常 安卓第一次进入页面有自动播放,但是在当前页面刷新就不生效了(这里也检测到是有加载到视频,已经执行到了play()方法,但是就是没有效果)
1 回复
针对您提到的在uni-app中使用uni.createVideoContext
控制视频自动播放,并在onReady
和onShow
中重新加载视频上下文,在安卓端页面刷新不生效的问题,这里提供一个可能的解决方案和代码示例。
首先,确保您已经正确使用了uni.createVideoContext
来获取视频上下文,并在适当的生命周期钩子中管理视频的播放状态。以下是一个简化的代码示例,展示了如何在onReady
和onShow
中重新加载视频上下文并尝试自动播放视频:
<template>
<view>
<video id="myVideo" src="your-video-url.mp4" autoplay="false"></video>
</view>
</template>
<script>
export default {
data() {
return {
videoContext: null,
};
},
onReady() {
this.initVideoContext();
},
onShow() {
this.reloadVideoContext();
},
methods: {
initVideoContext() {
this.videoContext = uni.createVideoContext('myVideo');
this.tryAutoPlayVideo();
},
reloadVideoContext() {
if (this.videoContext) {
// 假设有一个重置视频状态的方法,这里简单处理为重新初始化上下文
this.videoContext = null; // 清除旧的上下文
this.initVideoContext(); // 重新初始化上下文
}
},
tryAutoPlayVideo() {
if (this.videoContext) {
this.videoContext.play().catch((err) => {
console.error('自动播放失败:', err);
// 如果自动播放失败,可以在这里处理,比如显示播放按钮给用户手动点击
});
}
},
},
};
</script>
在这个示例中,initVideoContext
方法在onReady
生命周期钩子中被调用,用于初始化视频上下文。onShow
生命周期钩子中调用reloadVideoContext
方法,该方法尝试重置并重新初始化视频上下文。注意,这里简单地通过设置为null
再重新初始化来实现“重置”,实际开发中可能需要根据具体需求调整。
对于安卓端页面刷新不生效的问题,有几个可能的考虑点:
- 浏览器策略:某些浏览器(尤其是移动浏览器)对自动播放视频有严格的策略限制,要求视频必须静音或用户交互后才能播放。确保视频满足这些条件。
- uni-app版本:检查您使用的uni-app版本是否有已知的相关bug,尝试升级到最新版本。
- 代码逻辑:确保在
onShow
中正确重置了视频上下文,并且tryAutoPlayVideo
方法被正确调用。
如果以上方法仍然无法解决问题,建议详细检查控制台日志,查看是否有更具体的错误信息,或者考虑在uni-app社区和官方文档中寻求更多帮助。