uni-app h5 video 播放后台后进入无法继续播放黑屏,滑动进度条也无法继续播放

uni-app h5 video 播放后台后进入无法继续播放黑屏,滑动进度条也无法继续播放

示例代码:

<video :poster="poster" show-loading class="play" id="myVideo" autoplay :src="episodeData.url"
@error="videoErrorCallback" @loadedmetadata="loadedmetadata" controls>
</video>  

操作步骤:

<video :poster="poster" show-loading class="play" id="myVideo" autoplay :src="episodeData.url"
@error="videoErrorCallback" @loadedmetadata="loadedmetadata" controls>
</video>

预期结果:

实际结果:

bug描述:

uniapp h5 video 播放后台后进入无法继续播放黑屏,滑动进度条也无法继续播放

项目 信息
产品分类 uniapp/H5
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 10
HBuilderX类型 正式
HBuilderX版本号 3.94
浏览器平台 Chrome
浏览器版本 99
项目创建方式 HBuilderX

更多关于uni-app h5 video 播放后台后进入无法继续播放黑屏,滑动进度条也无法继续播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

播放后台后进入是什么意思,请完整描述一下操作步骤。是在手机端还是pc端浏览器有问题?

更多关于uni-app h5 video 播放后台后进入无法继续播放黑屏,滑动进度条也无法继续播放的实战教程也可以访问 https://www.itying.com/category-93-b0.html


试试这个例子,可以正常播放,可能是视频源的问题 <template>
<view>
<video :poster=“poster” show-loading class=“play” id=“myVideo” autoplay :src=“url” @error=“videoErrorCallback”
@loadedmetadata=“loadedmetadata” controls>
</view>
</template>

<script> export default { data() { return { poster: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/uni.png', url: 'https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4', } }, methods: { loadedmetadata(e){ console.log(e) }, videoErrorCallback: function(e) { console.log(e) uni.showModal({ content: e.target.errMsg, showCancel: false }) } } } </script> <style> .play { width: 750rpx; } </style>

在 Uni-app 中,H5 页面使用 video 组件时,可能会遇到在应用进入后台后再返回前台时,视频无法继续播放或出现黑屏的问题。这个问题通常与浏览器的策略、视频组件的生命周期管理以及资源释放有关。以下是一些可能的解决方案:

1. 监听页面生命周期

Uni-app 提供了页面生命周期的钩子函数,你可以在页面进入后台时暂停视频,并在页面重新显示时重新播放视频。

export default {
    data() {
        return {
            videoContext: null,
        };
    },
    onShow() {
        if (this.videoContext) {
            this.videoContext.play();
        }
    },
    onHide() {
        if (this.videoContext) {
            this.videoContext.pause();
        }
    },
    mounted() {
        this.videoContext = uni.createVideoContext('myVideo', this);
    },
};
<template>
    <video id="myVideo" src="your-video-url" controls></video>
</template>

在这个例子中,onShowonHide 生命周期钩子分别用于在页面显示和隐藏时控制视频的播放和暂停。

2. 手动重新加载视频

如果视频进入后台后无法继续播放,可以尝试在页面重新显示时手动重新加载视频。

export default {
    data() {
        return {
            videoSrc: 'your-video-url',
        };
    },
    onShow() {
        this.videoSrc = ''; // 清空视频源
        this.$nextTick(() => {
            this.videoSrc = 'your-video-url'; // 重新设置视频源
        });
    },
};
<template>
    <video :src="videoSrc" controls></video>
</template>

这种方法通过清空和重新设置视频源来强制重新加载视频。

3. 使用 autoplay 属性

如果视频在重新进入前台时需要自动播放,可以尝试添加 autoplay 属性。

<template>
    <video src="your-video-url" controls autoplay></video>
</template>

注意:自动播放可能会受到浏览器策略的限制,通常需要用户与页面进行交互后才能自动播放。

4. 检查浏览器策略

某些浏览器可能会在页面进入后台时暂停视频播放,以节省资源。你可以检查浏览器的策略,并确保视频播放符合浏览器的要求。

5. 使用 poster 属性

如果视频无法播放时出现黑屏,可以设置 poster 属性来显示一个封面图,避免黑屏。

<template>
    <video src="your-video-url" controls poster="your-poster-url"></video>
</template>

6. 调试和日志

如果问题仍然存在,可以添加调试日志,查看视频的状态和错误信息,帮助定位问题。

export default {
    data() {
        return {
            videoContext: null,
        };
    },
    mounted() {
        this.videoContext = uni.createVideoContext('myVideo', this);
        this.videoContext.onPlay(() => {
            console.log('Video is playing');
        });
        this.videoContext.onPause(() => {
            console.log('Video is paused');
        });
        this.videoContext.onError((err) => {
            console.error('Video error:', err);
        });
    },
};
回到顶部