vue使用原生videojs 播放m3u8格式的视频——播放m3u8格式视频(一)

vue使用原生video播放m3u8格式的视频

  • 1、安装依赖
  • 2、页面引入插件(这里我是页面单独引入,减少项目体积)
  • 3、页面中的使用
      • 常见问题
  • 4、实现过程
  • 5、实现.m3u8格式视频播放方法

1、安装依赖

npm install video.js --save // 视频播放器插件
npm install videojs-contrib-hls --save // 播放hls流插件

2、页面引入插件(这里我是页面单独引入,减少项目体积)

import videojs from "video.js";
import "video.js/dist/video-js.css";

3、页面中的使用

<template>
  <div class="myVideo">
    <video id="videoPlayer" class="video-js vjs-default-skin" controls playsinline autoplay="autoplay" width="500px">
      <source :src="attachmentLink" type="application/x-mpegURL" />
    </video>
  </div>
</template>

<script>
import videojs from "video.js";
import "video.js/dist/video-js.css";
export default {
  data() {
    return {
      dp: null,
      options: {
        autoplay: false, // 设置自动播放
        muted: true, // 设置了它为true,才可实现自动播放,同时视频也被静音(Chrome66及以上版本,禁止音视频的自动播放)
        preload: "auto", // 预加载
        controls: true, // 显示播放的控件
      },
      attachmentLink: "https://e-sign.dms.t.cn-np.com/files/m3u8_file/c4b94118-3c8d-4410-9987-985c2b44c278/c4b94118-3c8d-4410-9987-985c2b44c278.m3u8",
    };
  },
  mounted() {
   // 使用 $nextTick 解决vedio报错  The element or ID supplied is not valid. (videojs)
    this.$nextTick(() => {
      this.loadVideo();
    });
  },
  methods: {
    loadVideo() {
      this.db = videojs("videoPlayer", this.options);
      // 也可以使用以下方式给vedio设置 src
      // this.db.src([
      //   {
      //     src: "https://e-sign.dms.t.cn-np.com/files/m3u8_file/c4b94118-3c8d-4410-9987-985c2b44c278/c4b94118-3c8d-4410-9987-985c2b44c278.m3u8", // 地址
      //     type: "application/x-mpegURL", // 告诉videojs,这是一个hls流
      //   },
      // ]);
    },
    // 销毁
    beforeDestroy() {
      if (this.dp) {
        this.dp.dispose(); // dispose()会直接删除Dom元素
      }
    },
  },
};
</script>

<style lang="less" scoped>
.video-box {
  width: 100%;
  max-width: 500px;
  max-height: 500px;
}
// 暂停播放按钮居中
::v-deep .video-js .vjs-big-play-button {
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
</style>

常见问题

问题: 首次打开视频弹出框报:The element or ID supplied is not valid. (videojs)错误
*原因: videojs找不到需要初始化的playerID,页面未找到相应组件
vue使用原生videojs 播放m3u8格式的视频——播放m3u8格式视频(一)_第1张图片
解决方法: 延迟加载。
例如:

  1. 使用 this.$nextTick
  2. 放在mounted钩子函数里
  3. 使用setTimeout

4、实现过程

播放器在拿到XXX.m3u8视频地址(索引文件)后,会去请求拿到分片数据资源,也就是一大串的.ts文件列表,然后依次去请求这些.ts文件(当然这些是播放器内部自己实现的)

vue使用原生videojs 播放m3u8格式的视频——播放m3u8格式视频(一)_第2张图片

5、实现.m3u8格式视频播放方法

vue 实现.m3u8格式视频播放的方法有很多,可以看我最近的两篇博客,都有贴代码实现

1、原生videojs : vue使用原生videojs 播放m3u8格式的视频
2、vue-dplayer : vue使用vue-dplayer 播放m3u8格式的视频
3、dplayer : dplayer 播放m3u8格式的视频

你可能感兴趣的:(知识点(小记),工具,vue.js,音视频,javascript)