vue videojs 设置自动播放了仍然没有自动播放

vue yekong

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>

这样,视频应该可以在加载时自动播放了。

喜欢