首页前端开发JavaScript如何在vue中使用video.js播放m3u8格式的视频

如何在vue中使用video.js播放m3u8格式的视频

时间2024-01-31 20:41:03发布访客分类JavaScript浏览542
导读:收集整理的这篇文章主要介绍了如何在vue中使用video.js播放m3u8格式的视频,觉得挺不错的,现在分享给大家,也给大家做个参考。 目录一、安装二、引入videojs三、在组件中测试...
收集整理的这篇文章主要介绍了如何在vue中使用video.js播放m3u8格式的视频,觉得挺不错的,现在分享给大家,也给大家做个参考。
目录
  • 一、安装
  • 二、引入videojs
  • 三、在组件中测试并使用
    • 1. 实现基本的自动播放
    • 2. 实现换台
  • 四、踩坑小记
    • 1. 视频不能自动播放 或报错 DOMException: play() failed
    • 2. 换台的时候,url已经成功更改,但视频还是之前的
    • 3. 找不到mux.js模块
  • 五、 播放rtmp流

    @[toc] 注意:

     "vue": "^2.6.11", "video.js": "^7.10.2", "videojs-contrib-hls": "^5.15.0", "mux.js": "^5.7.0"

    一、安装

    yarn add video.jsyarn add videojs-contrib-hls // 这是播放hls流需要的插件yarn add mux.js // 在vue项目中,若不安装它可能报错

    二、引入videojs

    1.在src文件夹下新建 plugins文件夹,并新建video.js文件;

    video.js文件的内容如下:

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

    2.在main.js中引入刚刚的video.js文件

    import "./plugins/video.js";
         // 引入刚刚定义的video.js文件

    三、在组件中测试并使用

    1. 实现基本的自动播放

    test.vue文件

    template>
         div class="test-videojs">
         video id="videoplayer" class="video-js" muted>
        /video>
         /div>
        /template>
        script>
        import Videojs from "video.js";
     // 引入Videojs export default {
     data() {
     return {
     // https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8 是一段视频,可将cctv1 (是live现场直播,不能快退)的替换为它,看到快进快退的效果  nowplayVideoUrl: "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8" }
        ;
     }
    , mounted() {
         this.inITVideo(this.nowPlayVideoUrl);
     }
    , methods: {
     initVideo(nowPlayVideoUrl) {
      // 这些options属性也可直接设置在video标签上,见 muted  let options = {
      autoplay: true, // 设置自动播放  controls: true, // 显示播放的控件  sources: [   // 注意,如果是以option方式设置的src,是不能实现 换台的 (即使监听了nowPlayVideoUrl也没实现)   {
       src: nowPlayVideoUrl,   tyPE: "application/x-mpegURL" // 告诉videojs,这是一个hls流   }
      ]  }
        ;
      // videojs的第一个参数表示的是,文档中video的id  const myPlyer = Videojs("videoPlayer", options, function onPlayerReady() {
          console.LOG("onPlayerReady 中的this指的是:", this);
         // 这里的this是指Player,是由Videojs创建出来的实例  console.log(myPlyer === this);
     // 这里返回的是true  }
        );
     }
     }
    }
        ;
        /script>
        style lang="scss">
    #videoPlayer {
         width: 500px;
         height: 300px;
         margin: 50px auto;
    }
        /style>
        

    视频播放效果如图:

    打印结果如图:

    2. 实现换台

    Test.vue文件

    template>
         div class="test-videojs">
         video id="videoPlayer" class="video-js">
        /video>
         el-button type="danger" @click="changeSource">
        切换到CCTV3/el-button>
         /div>
        /template>
        script>
        import Videojs from "video.js";
     // 引入Videojsexport default {
     data() {
     return {
      nowPlayVideoUrl: "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8",  options: {
      autoplay: true, // 设置自动播放  muted: true, // 设置了它为true,才可实现自动播放,同时视频也被静音 (Chrome66及以上版本,禁止音视频的自动播放)  PReload: "auto", // 预加载  controls: true // 显示播放的控件  }
    ,  player:null }
        ;
     }
    , mounted() {
         this.getVideo(this.nowPlayVideoUrl);
     }
    , methods: {
     getVideo(nowPlayVideoUrl) {
          this.player = Videojs("videoPlayer", this.options);
      //关键代码, 动态设置src,才可实现换台操作  this.player.src([  {
       src: nowPlayVideoUrl,   type: "application/x-mpegURL" // 告诉videojs,这是一个hls流  }
          ]);
     }
    , changeSource() {
          this.nowPlayVideoUrl = "http://ivi.bupt.edu.cn/hls/cctv3hd.m3u8";
          console.log(this.nowPlayVideoUrl, "改变了");
     }
     }
    , watch: {
     nowPlayVideoUrl(newVal, old) {
          this.getVideo(newVal);
     }
     }
    , beforedestroy() {
     if (this.player) {
          this.player.dispose();
     // Removing Players,该方法会重置videojs的内部状态并移除dom }
     }
    }
        ;
        /script>
        style lang="scss">
    #videoPlayer {
         width: 500px;
         height: 300px;
         margin: 50px auto;
    }
        /style>
        

    视频切换效果如图:

    四、踩坑小记

    1. 视频不能自动播放 或报错 DOMException: play() failed

    需用Muted属性解决

    报错信息:DOMException: play() failedbecause the user didn't interact with the document First.(用户还没有交互,不能调用play)

    解决办法:设置muted属性为true

     video id="videoPlayer" class="video-js" muted>
        /video>
        

    关于muted属性:

    • muted 属性,设置或返回音频是否应该被静音(关闭声音); 属性的值是true和false;
    • muted="false" 表示视频不用静音(视频播放便有声音),但设置 muted="fasle" 的情况下,视频无法实现自动播放。
    • video 标签中 muted 的作用: 允许视频自动播放;(Chrome66版本开始,禁止视频和音频的自动播放)

    2. 换台的时候,url已经成功更改,但视频还是之前的

    需得动态设置src才能实现

    // 动态设置srcthis.player.src([  {
       src: nowPlayVideoUrl,   type: "application/x-mpegURL" // 告诉videojs,这是一个hls流  }
         ]);
        

    3. 找不到mux.js模块

    报错信息:* mux.js/lib/tools/parse-sidx in ./node_modules/video.js/dist/video.es.js To install it, you can run: npm install --save mux.js/lib/tools/parse-sidx

    解决办法:安装mux.js

    yarn add mux.js

    五、 播放rtmp流

    播放rtmp流的操作与播放hls流的操作几乎相同,不同在于:

    import "videojs-flash";
         // 播放rtmp流需要的插件type: 'rtmp/flv', // 这个type值必写, 告诉videojs这是一个rtmp流视频

    以上就是如何在vue中使用video.js 播放m3u8格式的视频的详细内容,更多关于vue 使用videojs 播放m3u8格式的视频的资料请关注其它相关文章!

    您可能感兴趣的文章:
    • vue video和vue-video-player实现视频铺满教程
    • vue-video-player视频播放器使用配置详解
    • vue+node 实现视频在线播放的实例代码
    • vue项目中播放rtmp视频文件流的方法
    • vue实现移动端input上传视频、音频
    • vue-video-player实现实时视频播放方式(监控设备-rtmp流)
    • vue结合el-upload实现腾讯云视频上传功能
    • vue项目中自定义video视频控制条的实现代码
    • vue中上传视频或图片或图片和文字一起到后端的解决方法
    • vue视频播放插件vue-video-player的具体使用方法
    • vue vantUI实现文件(图片、文档、视频、音频)上传(多文件)
    • Vue登录主页动态背景短视频制作
    • vue通过video.js解决m3u8视频播放格式的方法
    • Vue结合Video.js播放m3u8视频流的方法示例

    声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

    vue

    若转载请注明出处: 如何在vue中使用video.js播放m3u8格式的视频
    本文地址: https://pptw.com/jishu/594453.html
    c语言中文本输出的函数名称是什么? 在什么语言中字符串以\0标志字符串的结束?

    游客 回复需填写必要信息