zoukankan      html  css  js  c++  java
  • vue 中 使用 vedio.js 实现播放m3u8格式的视频

    1安装

    yarn add video.js

    yarn add videojs-contrib-hls // 这是播放hls流需要的插件

    yarn add mux.js // 在vue项目中,若不安装它可能报错

    2 vue中 main.js中引入

    //video js
    import "video.js/dist/video-js.css"; // 引入video.js的css
    import hls from "videojs-contrib-hls"; // 播放hls流需要的插件
    Vue.use(hls);

    3  实现播放m3u8格式的视频 

    单个视频

    <template>
      <div class="test-videojs">
        <video
          :id="postId"
          class="video-js"
          controls
          preload="none"
          poster="http://vjs.zencdn.net/v/oceans.png"
          :options="options"
        >
          <source :src="this.nowPlayVideoUrl" type="application/x-mpegURL" />
        </video>
      </div>
    </template>
    <script>
    import Videojs from "video.js"; // 引入Videojs
    export default {
      data() {
        return {
          postId: null,
          nowPlayVideoUrl:
            "https://cdn.ele-ai.com/a508ce6eba844e94a1d2ad8db2d89f52/a6dac44e8a5e4a0eb602931e0d23d6d2-3ba621fa011bce0dfe4663431a532187-ld.m3u8",
          options: {
            autoplay: false, // 设置自动播放
            controls: true, // 显示播放的控件
          },
        };
      },
      mounted() {
        this.$nextTick(() => {
          this.initVideo(this.now);
        });
      },
      created() {
        this.postId = "video" + new Date().getTime().toString().substr(8);
      },
      methods: {
        initVideo() {
          let myPlyer = Videojs(
            this.postId,
            this.options,
            function onPlayerReady() {
              console.log("onPlayerReady 中的this指的是:", this); // 这里的this是指Player,是由Videojs创建出来的实例
              console.log(myPlyer === this); // 这里返回的是true
            }
          );
        },
      },
    };
    </script>
    <style lang="scss">
    .video-js {
       200px;
      height: 100px;
      .vjs-big-play-button {
        top: 0;
        left: 0;
        transform: translate(50%, 50%);
      }
    }
    </style>

     多个视频

    <template>
      <div class="test-videojs">
        <!-- <video id="videoPlayer" class="video-js" muted></video> -->
        <div v-for="(item,index) in audios" :key="index">
          {{item.id}}
           <video :id="'videoPlayer'+item.id" class="video-js" controls preload="none" 
             poster="http://vjs.zencdn.net/v/oceans.png"
             :options="options"
             >
         <source :src="item.now" type="application/x-mpegURL">
      </video>
        </div>
        
      </div>
    </template>
    <script>
    import Videojs from "video.js"; // 引入Videojs 
    export default {
      data() {
        return {
        //  https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8 是一段视频,可将cctv1 (是live现场直播,不能快退)的替换为它,看到快进快退的效果
          nowPlayVideoUrl: "https://cdn.ele-ai.com/a508ce6eba844e94a1d2ad8db2d89f52/a6dac44e8a5e4a0eb602931e0d23d6d2-3ba621fa011bce0dfe4663431a532187-ld.m3u8",
          audios:[
            {   now:"https://cdn.ele-ai.com/a508ce6eba844e94a1d2ad8db2d89f52/a6dac44e8a5e4a0eb602931e0d23d6d2-3ba621fa011bce0dfe4663431a532187-ld.m3u8",id:1},
            {   now:"https://cdn.ele-ai.com/a508ce6eba844e94a1d2ad8db2d89f52/a6dac44e8a5e4a0eb602931e0d23d6d2-3ba621fa011bce0dfe4663431a532187-ld.m3u8",id:2},
            {   now:"https://cdn.ele-ai.com/a508ce6eba844e94a1d2ad8db2d89f52/a6dac44e8a5e4a0eb602931e0d23d6d2-3ba621fa011bce0dfe4663431a532187-ld.m3u8",id:3},
            {   now:"https://cdn.ele-ai.com/a508ce6eba844e94a1d2ad8db2d89f52/a6dac44e8a5e4a0eb602931e0d23d6d2-3ba621fa011bce0dfe4663431a532187-ld.m3u8",id:4},
          ],
          options:{
            autoplay: false, // 设置自动播放
            controls: true, // 显示播放的控件
          }
        };
      },
      mounted() {
           this.$nextTick(() => {
          this.initVideo(this.now);
        });
      },
      methods: {
        initVideo() {
          // videojs的第一个参数表示的是,文档中video的id
        this.audios.forEach((item,index)=>{
           let myPlyer = Videojs("videoPlayer"+item.id, this.options, function onPlayerReady() {
            console.log("onPlayerReady 中的this指的是:", this); // 这里的this是指Player,是由Videojs创建出来的实例
            console.log(myPlyer === this); // 这里返回的是true
          });
        }) 
        }
      }
    };
    </script>
    <style lang="scss">
    #videoPlayer {
       100px;
      height: 100px;
      margin: 50px auto;
    }
    </style>
  • 相关阅读:
    线程池3种终止方式比较
    SQL Update多表联合更新的方法
    SQL SERVER 表添加新字段
    JSONObject
    char码值对应列表大全
    JSONOjbect,对各种属性的处理
    Spring MVC ajax提交方式
    docker 初学者 安装 命令
    VMware虚拟机安装CentOS7 设置Nat网络 (超详细)
    关于 i++ 和 ++ i
  • 原文地址:https://www.cnblogs.com/lvlisn/p/14804150.html
Copyright © 2011-2022 走看看