vue 项目中需要使用videojs进行视频自动播放,但是设置了autoplay: true后视频仍然没有自动播放。
<template>
<div class="video-js">
<video ref="videoPlayer" class="video-js" controls></video>
</div>
</template>
<script>
import videojs from 'video.js';
import 'video.js/dist/video-js.css';
export default {
props: {
url: {
type: String,
required: true,
}
},
watch: {
url() {
console.log('视频变化,更新视频')
this.createPlayer();
},
},
mounted() {
this.createPlayer();
},
beforeUnmount() {
if (this.player) {
this.player.dispose();
}
},
methods: {
createPlayer() {
const options = {
controls: true,
autoplay: true,
preload: 'auto',
url: this.url,
controlBar: {
// 显式定义你想要显示的控制栏元素
// 确保不包含 'pictureInPictureToggle'
volumePanel: { inline: false },
playToggle: true,
currentTimeDisplay: true,
timeDivider: true,
durationDisplay: true,
progressControl: true,
fullscreenToggle: true,
playbackRateMenuButton: true
}
};
this.player = videojs(this.$refs.videoPlayer, options);
this.player.src({type: 'application/x-mpegURL', src: options.url});
}
}
};
</script>
<style>
.video-js {
position: relative;
width: 100%; /* 将宽度设置为100%,以适应外部容器的宽度 */
height: 100%; /* 将高度设置为100%,以适应外部容器的高度 */
}
</style>
解决办法
视频没有自动播放的原因可能是浏览器的自动播放策略限制。为了遵循这些策略并确保视频能够自动播放,你需要将muted
属性设置为true
。这样,视频将在静音状态下自动播放。你可以在options
对象中添加muted: true
,如下所示:
const options = {
controls: true,
autoplay: true,
muted: true, // 添加这一行
preload: 'auto',
url: this.url,
// ...其他选项
};
然后,你还需要在<video>
标签中添加muted
属性:
<video ref="videoPlayer" class="video-js" controls muted></video>
这样,视频应该可以在加载时自动播放了。