西瓜播放器xgplayer的简单使用demo

news/2024/7/10 0:47:30 标签: vue, javascript

安装

javascript">npm install xgplayer  --save
npm install --save xgplayer-flv.js

引入

javascript">  import FlvJsPlayer from 'xgplayer-flv.js';
  import Player from 'xgplayer';

使用

javascript"><div class="video" v-show="isPlay" :id="camDOMid" ref="video"></div>
javascript">isPlay: false,
player: null,
javascript">// 设置视频配置(注意:initPlayer应放在异步函数里或mounted之后,不可在created里直接加载,否则不生效)
initPlayer(url) {
  console.log("this.camDOMid", this.camDOMid);
  var player = document.getElementById(this.camDOMid);
  this.isPlay = true;
  this.player = new FlvJsPlayer({
    id: this.camDOMid,
    url: url,
    fitVideoSize: 'auto',
    hasStart: true,
    autoplay: true, //自动播放,设置自动播放必要参数
    autoplayMuted: true, //自动播放静音,设置自动播放参数必要参数
    volume: 0,
    defaultMuted: true,
    isLive: true,
    playsinline: false,
    screenShot: true,
    fluid: true,
    aspectRatio: '16:9',
    whitelist: [''],
    ignores: ['time'],
    closeVideoClick: true,
    // errorTips: '<span class="app-error">无视频源</span>',
    customConfig: {
      isClickPlayBack: false
    },
    flvOptionalConfig: {
      enableWorker: true,
      enableStashBuffer: true, //启用缓存
      stashInitialSize: 4096, //缓存大小4m
      lazyLoad: false,
      lazyLoadMaxDuration: 40 * 60,
      autoCleanupSourceBuffer: true,
      autoCleanupMaxBackwardDuration: 35 * 60,
      autoCleanupMinBackwardDuration: 30 * 60
    } //flv.js可选配置项 [flv.js配置](https://github.com/bilibili/flv.js/blob/master/docs/api.md#config)
  });
  console.log("this.player", this.player);
  this.player.once('complete', () => {
    console.log('complete')
    try {
      this.player.play() // 尝试再次执行播放
      setTimeout(() => { // 500毫秒收检测
        if (!this.player.hasStart && this.player.currentTime ===
          0) { // hasStart返回false,并且播放时间还是0,那么就可以认为自动播放失效了
          isAutoPlay = false;
        }
      }, 500)
    } catch (e) {
      console.log(e);
    }
  })
},

封装为组件

这里我命名为CameraItem5(因为我试过几个插件)

javascript"><!--xgplayer  -->
<template>
  <div class="cam" v-if="mainCamUrl != ''">
    <div class="video" v-show="isPlay" :id="camDOMid" ref="video"></div>
  </div>
</template>
<script>
  import FlvJsPlayer from 'xgplayer-flv.js';
  import Player from 'xgplayer';
  export default {
    name: "CameraItem5",
    components: {},
    props: ['mainCamUrl', 'camDOMid'],
    data() {
      return {
        isPlay: false,
        player: null,
      }
    },
    computed: {
    },
    created() {},
    mounted() {
      this.getData();
    },
    methods: {
      // 设置视频配置(注意:initPlayer应放在异步函数里或mounted之后,不可在created里直接加载,否则不生效)
      initPlayer(url) {
        console.log("this.camDOMid", this.camDOMid);
        var player = document.getElementById(this.camDOMid);
        this.isPlay = true;
        this.player = new FlvJsPlayer({
          id: this.camDOMid,
          url: url,
          fitVideoSize: 'auto',
          hasStart: true,
          autoplay: true, //自动播放,设置自动播放必要参数
          autoplayMuted: true, //自动播放静音,设置自动播放参数必要参数
          volume: 0,
          defaultMuted: true,
          isLive: true,
          playsinline: false,
          screenShot: true,
          fluid: true,
          aspectRatio: '16:9',
          whitelist: [''],
          ignores: ['time'],
          closeVideoClick: true,
          // errorTips: '<span class="app-error">无视频源</span>',
          customConfig: {
            isClickPlayBack: false
          },
          flvOptionalConfig: {
            enableWorker: true,
            enableStashBuffer: true, //启用缓存
            stashInitialSize: 4096, //缓存大小4m
            lazyLoad: false,
            lazyLoadMaxDuration: 40 * 60,
            autoCleanupSourceBuffer: true,
            autoCleanupMaxBackwardDuration: 35 * 60,
            autoCleanupMinBackwardDuration: 30 * 60
          } //flv.js可选配置项 [flv.js配置](https://github.com/bilibili/flv.js/blob/master/docs/api.md#config)
        });
        console.log("this.player", this.player);
        this.player.once('complete', () => {
          console.log('complete')//以下这段我没成功。
          try {
            this.player.play() // 尝试再次执行播放
            setTimeout(() => { // 500毫秒后检测
              if (!this.player.hasStart && this.player.currentTime ===
                0) { // hasStart返回false,并且播放时间还是0,那么就可以认为自动播放失效了
                isAutoPlay = false;
              }
            }, 500)
          } catch (e) {
            console.log(e);
          }
        })
      },
      getData() {
        let playUrl = this.mainCamUrl, //播放地址
        this.initPlayer(playUrl)
      },
    },
    beforeDestroy() {
      if (this.player) {
        this.player.destroy();
      }
      console.log('销毁了');
	  },
  }
</script>
<style lang='scss' scoped>
</style>
<style lang='scss'>
  .cam {
    position: relative;
  }
  .video {
    width: 100%;
    height: 100%;
  }
</style>

页面上引入

javascript">import CameraItem from '@/components/CameraItem5'; //xgplayer.js
export default {
    components: {
      CameraItem,
    },
}

使用

javascript"> <CameraItem :mainCamUrl="mainCamUrl"  camDOMid="camera1">
 </CameraItem>

http://www.niftyadmin.cn/n/1239831.html

相关文章

光盘是计算机IO设备,io 设备是什么

输入输出设备(IO 设备)&#xff0c;是数据处理系统的关键外部设备之一&#xff0c;可以和计算机本体进行交互使用。如&#xff1a;键盘、写字板、麦克风、音响、显示器等。因此输入输出设备起了人与机器之间进行联系的作用。输入输出设备(IO 设备)&#xff0c;是数据处理系统的…

vue 路由跳转保留页面缓存和滚动位置

业务场景&#xff1a; 在a页面滑动列表&#xff0c;点击进入b页面&#xff0c;再返回a页面时&#xff0c;a页面保留滑动的位置和页面缓存。 解决思路&#xff1a; 使用路由的keepAlive方法&#xff0c;keepAlive为true就会保留页面缓存。&#xff08;返回该页面不会执行crea…

启动云服务器出错了,腾讯云服务器启动lightdm遇到“Active: failed (Result: start-limit)”错误解决方法...

我在腾讯云服务器上安装图形界面&#xff0c;在启动lightdm时失败了&#xff1a;[rootVM_0_11_centos gdm]# systemctl start lightdm[rootVM_0_11_centos gdm]# systemctl status lightdm● lightdm.service - Light Display ManagerLoaded: loaded (/usr/lib/systemd/system/…

vue集成 xgplayer西瓜播放器的组件封装。画面卡停重连。

前言 设置画面卡死重连机制是因为 长时间测试下&#xff0c;发现有时候画面会卡死&#xff0c;然后不会自动恢复播放。 参考了这位大佬的帖子&#xff0c;卡住是因为服务器webSocket推流断开了又迅速继续推流&#xff0c;播放插件无法继续播放。 https://blog.csdn.net/HJFQC/…

游戏服务器停服维护公告,《黑潮之上》2020年12月22日全服务器停服维护公告

在黑潮之上手游中2020年12月22日更新了哪些有趣的内容呢&#xff1f;不清楚本次维护更新内容如何的话&#xff0c;下面就来看一下吧&#xff01;各位接触者为了提供良好的游戏体验&#xff0c;保证服务器稳定运行&#xff0c;《黑潮之上》将于2020年12月22日早5:00开始进行全服…

vue 地址栏#号前随意输入字符问题

问题&#xff1a; 地址栏#号前随意输入字符&#xff0c;也能跳转页面使用&#xff0c;有些接口能用。但是有些接口404。 解决方法&#xff1a; 在路由拦截增加这段判断&#xff1a; // 判断#号前的地址是否正确 let wPath window.location.href; //页面地址 let current…

通过ajax跨域请求传输formdata,使用ajax跨域调用springboot框架的api传输文件

这篇文章主要介绍了使用ajax跨域调用springboot框架的api传输文件&#xff0c;文中示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下在新项目中使用的是springboot编写的api&#xff0c;涉及到ajax跨域请求和传输文件的问题&…

ajax如何设置后台处理进度,让ajax更加友好,实时显示后台处理进度。

ajax应用越来越多&#xff0c;大部分ajax处理都是在前台显示1个"loading...",然后把数据提交给服务器进行处理&#xff0c;处理完毕后显示"处理完毕"。我们能否让ajax更加友好点&#xff0c;实时显示服务器处理的进度了&#xff1f;这在一些长时间的请求中…