公司需要播放flv格式播放器,所以基于flv.js写了个带UI的播放器,可支持MP4和flv格式,需要的可以直接复制,播放器界面如下,鼠标hover状态,以及播放中下边界显示播放进度

Android 饺子播放器状态栏_Android 饺子播放器状态栏

Android 饺子播放器状态栏_进度条_02

 

 

 

 

 

1.引入

首先将后边代码保存作为组件引入

 

<FlvVideo   :VideoUrl="defintion"  VideoCode="flv"> </FlvVideo>
import FlvVideo from "~/components/flv";
export default {
  components:{
    FlvVideo
  },
data(){
return{
defintion:[]
}
}
。。。。。
}

2.设置清晰度

this.defintion=[//设置不同清晰度,以及清晰度按钮文本
              {url:this.urls+'?definition=LD&videoType=flv',leavel:'高清'},
              {url:this.urls+'?definition=SD&videoType=flv',leavel:'超清'}
              ]

 

 

//将一下代码保存为flv.vue

<template>

  <!-- create by zzh 2020-6-20 23:18 -->

  <div class="video-box" :style="{position:isFixed}">

    <!--video 盒子-->

    <div class="video-box-body" @mousemove="Enter" @mouseenter="Enter" @click="Enter">

      <div class="loader" v-show="isLoading" title="2">

        <svg

          version="1.1"

          id="loader-1"

          x="0px"

          y="0px"

          width="100px"

          height="100px"

          viewBox="0 0 50 50"

          style="enable-background:new 0 0 50 50;"

          xml:space="preserve"

        >

          <path

            fill="#000"

            d="M43.935,25.145c0-10.318-8.364-18.683-18.683-18.683c-10.318,0-18.683,8.365-18.683,18.683h4.068c0-8.071,6.543-14.615,14.615-14.615c8.072,0,14.615,6.543,14.615,14.615H43.935z"

            transform="rotate(110.097 25 25)"

          >

            <animateTransform

              attributeType="xml"

              attributeName="transform"

              type="rotate"

              from="0 25 25"

              to="360 25 25"

              dur="0.6s"

              repeatCount="indefinite"

            />

          </path>

        </svg>

        <div class="load-msg">加载中,请稍后....</div>

      </div>

      <canvas v-show="isCanvas" class="video-body" id="canvas">您的浏览器不支持canvas</canvas>

      <video

        v-show="!isCanvas"

        class="video-body"

        @ended="ended($event)"

        @error="error($event)"

        @loadstart="loadstart($event)"

        @canplay="canplay($event)"

        @seeking="seeking($event)"

        @seeked="seeked($event)"

        @timeupdate="timeupdate($event)"

        id="videoBody"

      >您的浏览器不支持video</video>

      <!--控制条盒子-->

      <div class="video-control" v-if="isLoaded" v-show="isShowControl">

        <div class="pull-left fontzero control-leftview">

          <!--刷新键-->

          <!-- <div class="control-btn loadbtn"></div> -->

          <!--暂停/播放键-->

          <div class="control-btn playbtn" :class="{pausebtn:isPlay}" @click="play"></div>

        </div>

        <div class="pull-left fontzero progress-box">

          <div class="progress-box-body">

            <!--播放时长-->

            <div class="current-time pull-left">{{currentDuration|initTimeLength}}</div>

            <div class="durationbar-box pull-left">

              <!--总视频长度进度条-->

              <div class="durationbar">

                <!--缓冲进度条-->

                <div class="bufferbar" :style="{width:getBuffPrecent+'%'}"></div>

                <!--正在播放进度条-->

                <div class="currentbar" :style="{width:(currentDuration/duration)*100+'%'}"></div>

                <div

                  class="drawbar"

                  :class="{drawbar_active:isdrawbar_active}"

                  :style="{left:(currentDuration/duration)*100+'%',transform: 'scale(2) rotateZ('+(currentDuration/duration)*4*720+'deg)'}"

                ></div>

                <input

                  class="bar-input"

                  @mouseleave="removeDrawbar"

                  @mouseenter="setDrawbar"

                  @mouseup="sliderUp()"

                  @input="slider($event,'continue')"

                  @change="slider($event,'')"

                  type="range"

                  min="0"

                  max="100"

                  :value="getCurrentDurationPercent"

                />

              </div>

            </div>

            <!--总时长-->

            <div class="duration-time pull-left">{{duration|initTimeLength}}</div>

          </div>

        </div>

        <div class="pull-left fontzero control-rightview">

          <!-- 清晰度切换 -->

          <div class="defintion-wrap" v-show="isShowDefintion">

            <div

              class="leavel"

              v-for="(item,index) in VideoUrl"

              :key="item.leave"

              :class="{isActive:defintion==item.leavel}"

              @click="chooseDefintion(item.leavel,index)"

            >{{item.leavel}}</div>

          </div>

          <div class="defintion" @click="openDefintion">{{defintion}}</div>

          <!-- 倍数播放 -->

          <div class="speed-wrap" v-show="isShowSpeed">

            <div

              class="leavel"

              v-for="item in Speed"

              :key="item"

              @click="chooseSpeed(item)"

              :class="{isActive:speed==item}"

            >X{{item.toFixed(1)}}</div>

          </div>

          <div class="speed" @click="openSpeed">X{{speed}}</div>

          <!--音量键-->

          <div class="control-btn mutedbtn" :class="{muted:isMuted}" @click="setMute()"></div>

          <div class="volumn-btn-wrap">

            <input

              class="volume-input"

              :style="{'background':'linear-gradient(to right, #a7bfe8, #6190e8 ' + volume + '%, #ebeff4)' }"

              @input="setvolume($event)"

              @change="setvolume($event,'end')"

              type="range"

              min="0"

              max="100"

              v-model="volume"

            />

            <div class="volumn-btn" :style="{left:(volume)+'px'}"></div>

          </div>


          <!--全屏键-->

          <div class="control-btn fullscreenbar" @click="fullScreen"></div>

          <!-- <div class="control-btn mime" @click="switchMime()">{{mime}}</div> -->

        </div>

      </div>

      <div class="video-progress" v-if="ifisShowControl" v-show="!isShowControl">

        <div class="video-progress-current" :style="{width:(currentDuration/duration)*100+'%'}"></div>

      </div>

    </div>

  </div>

</template>

<script>

export default {

  data() {

    return {

      flvSdkPath: "https://cdn.bootcss.com/flv.js/1.5.0/flv.min.js",

      mime: "flv",

      currentDuration: "0",

      currentDurationTemp: 0,

      duration: "1",

      getBuffPrecent: "",

      isPlay: false,

      refDom: null,

      flv_player_instance: null,

      volume: 0,

      canvas: null,

      context: null,

      isCanvas: false,

      isShowControl: false,

      isLoading: false,

      isdrawbar_active: false,

      width: 0,

      height: 0,

      isFixed: "relative",

      timer: null,

      speed: 1,

      defintion: "",

      isShowSpeed: false,

      isShowDefintion: false,

      controlTimer: null,

      getCurrentDurationPercent: 0,

      isNotDrag: true, //标志是否拖动中,快进快退中避免更新进度条

      flvVideoCode: "flv",

      isLoaded: false,

      defintionTimer: null,

      speedTimer: null,

      isMuted: false,

    };

  },

  head() {

    return {};

  },

  props: {

    // VideoUrl: {

    //   type: String,

    //   default:

    //     "http://store.91yunshi.com/storage/videoAuth/gaugua/41175fe7fdc74354a8d99a3f7aa1457d.mp4?videoType=flv&_t=1592535251776"

    // },

    Speed: {

      type: Array,

      default() {

        return [0.5, 1.0, 1.5, 2];

      },

    },

    ifisShowControl: {

      type: Boolean,

      default: true, //只支持flv或MP4

    },

    VideoCode: {

      type: String,

      default: "flv", //只支持flv或MP4

      validator: function (value) {

        // 这个值必须匹配下列字符串中的一个

        return ["flv", "mp4"].indexOf(value) !== -1;

      },

    },

    VideoUrl: {

      type: Array,

      default() {

        return [

          // {

          //   url:

          //     "http://store.91yunshi.com/storage/videoAuth/gaugua/41175fe7fdc74354a8d99a3f7aa1457d.mp4?videoType=flv&_t=1592535251776",

          //   leavel: "高清"

          // },

          // {

          //   url:

          //     "http://store.91yunshi.com/storage/videoAuth/gaugua/41175fe7fdc74354a8d99a3f7aa1457d.mp4?videoType=flv&_t=1592535251776",

          //   leavel: "超清"

          // },

          // {

          //   url:

          //     "http://store.91yunshi.com/storage/videoAuth/gaugua/41175fe7fdc74354a8d99a3f7aa1457d.mp4?videoType=flv&_t=1592535251776",

          //   leavel: "蓝光"

          // }

        ];

      },

    },

  },

  watch: {

    VideoUrl: {

      handler(newVal, old) {

        this.reloadUrl();

      },

      deep: true,

    },

  },

  filters: {

    initTimeLength(timeLength) {

      let result = parseInt(timeLength);

      let h =

        Math.floor(result / 3600) < 10

          ? "0" + Math.floor(result / 3600)

          : Math.floor(result / 3600);

      let m =

        Math.floor((result / 60) % 60) < 10

          ? "0" + Math.floor((result / 60) % 60)

          : Math.floor((result / 60) % 60);

      let s =

        Math.floor(result % 60) < 10

          ? "0" + Math.floor(result % 60)

          : Math.floor(result % 60);


      return `${h}:${m}:${s}`;

      // //根据秒数格式化时间

      // timeLength = parseInt(timeLength);

      // var second = timeLength % 60;

      // var minute = (timeLength - second) / 60;

      // return (

      //   (minute < 10 ? "0" + minute : minute) +

      //   ":" +

      //   (second < 10 ? "0" + second : second)

      // );

    },

    // speedFilter(val){

    //   console.log(val);

    //   let num = parseInt(val)

    //   return num.toFixed(1)

    // }

  },

  methods: {

    switchMime() {

      if (this.mime == "flv") {

        this.mime = "mp4";

      } else {

        this.mime = "flv";

      }

      this.$emit("mime", this.mime);

    },

    setDrawbar() {

      this.isdrawbar_active = true;

    },

    removeDrawbar() {

      this.isdrawbar_active = false;

    },

    Enter() {

      clearTimeout(this.controlTimer);

      this.isShowControl = true;

      this.controlTimer = setTimeout(() => {

        this.isShowControl = false;

      }, 5000);

    },

    openDefintion() {

      //打开清晰度切换容器

      clearTimeout(this.defintionTimer);

      this.isShowDefintion = true;

      this.defintionTimer = setTimeout(() => {

        this.isShowDefintion = false;

      }, 3000);

    },

    chooseDefintion(defintion, index) {

      localStorage.setItem("flv_defintion", index);

      localStorage.setItem(

        "flv_defintion_currenttime",

        this.refDom.currentTime

      );

      //选择清晰度

      this.defintion = defintion;

      this.isShowDefintion = false;

      this.reloadUrl();

    },

    reloadUrl() {

      this.flv_destroy();

      this.initPlay();

    },

    openSpeed() {

      //打开播放速度容器

      clearTimeout(this.speedTimer);

      this.isShowSpeed = true;

      this.speedTimer = setTimeout(() => {

        this.isShowSpeed = false;

      }, 3000);

    },

    chooseSpeed(speed) {

      //选择播放速度

      this.refDom.playbackRate = speed;

      this.speed = speed;

      this.isShowSpeed = false;

    },

    setvolume(e, isend) {

      //设置音量

      let dom = e.target;

      if (isend == "end" && this.isMuted) {

        this.refDom.muted = false;

        this.isMuted = false;

      }

      this.refDom.volume = dom.value / 100;

      localStorage.setItem("fly_volume", dom.value / 100);

      this.volume = dom.value;

    },

    slider(e, type) {

      //进度滑动设置

      let dom = e.target;

      this.currentDuration = this.currentDurationTemp =

        (Number(dom.value) * this.duration) / 100;

      if (type == "continue") {

        this.refDom.pause();

      } else {

        this.refDom.currentTime = this.currentDuration;

      }

    },

    sliderUp() {

      this.refDom.currentTime = this.currentDurationTemp;

      // this.isNotDrag=true;

      //  console.log( this.isNotDrag);

      this.refDom.play();

    },

    init(videoItem) {

      this.isLoaded = false; //播放器数据初始化能播放后再显示UI页面

      let url = "";

      this.refDom = document.getElementById("videoBody");

      if (!!!videoItem) return;

      url = videoItem.url;

      console.log(url);

      //flv播放器初始化

      window.cancelAnimationFrame(this.timer);

      if (flvjs.isSupported()) {

        this.flv_player_instance = flvjs.createPlayer(

          {

            seekType: "range",

            type: this.flvVideoCode,

            url: url,

            isLive:false

          },

          {

            enableWorker: true,

            lazyLoad: false,

            lazyLoadMaxDuration: 20 * 60,

          }

        );

        this.defintion = videoItem && videoItem.leavel;

        this.flv_player_instance.attachMediaElement(this.refDom);

        this.flv_player_instance.load(); //加载

        this.flv_player_instance.play();

        this.flv_player_instance.on("error", (err) => {

          // console.log('err', err);

          if (err == "MediaError") {

            if (this.flvVideoCode == "flv") {

              //如果是格式错误,尝试切换格式播放

              this.flvVideoCode = "mp4";

              console.warn("尝试切换mp4格式播放");

            } else {

              console.warn("尝试切换flv格式播放");

              this.flvVideoCode = "flv";

            }

            this.reloadUrl();

          }

        });

      } else {

        this.refDom.src = url;

      }

    },

    flv_destroy() {

      if (this.flv_player_instance) {

        this.flv_player_instance.pause();

        this.flv_player_instance.unload();

        this.flv_player_instance.detachMediaElement();

        this.flv_player_instance.destroy();

        this.flv_player_instance = null;

      }

    },

    setMute() {

      if (!this.refDom.muted) {

        this.refDom.muted = true;

        this.isMuted = true;

      } else {

        this.refDom.muted = false;

        this.isMuted = false;

      }

    },

    canplay(e) {

      this.isLoaded = true;

      let currentTime = localStorage.getItem("flv_defintion_currenttime"); //保存上次进度,切换清晰度的时候还原进度

      //资源可以播放

      let dom = e.target;

      if (!!currentTime) {

        dom.currentTime = currentTime;

        localStorage.removeItem("flv_defintion_currenttime");

      }

      this.duration = dom.duration || 1;

      this.currentDuration = dom.currentTime || 0;

      dom.volume = localStorage.getItem("fly_volume") || 0.5;

      this.volume = dom.volume * 100;

      this.speed = dom.playbackRate.toFixed(1);

      dom.play();

      this.isLoading = false;

      this.$emit("isplay", true);

    },

    getCanvasInit() {

      //canvas初始化

      this.canvas = document.getElementById("canvas");

      this.context = canvas.getContext("2d");

      this.canvas.width = document.body.clientWidth;

      this.canvas.height = document.body.clientHeight;

      this.drawCanvas();

    },

    drawCanvas() {

      //绘制视频到canvas

      this.context.drawImage(

        this.refDom,

        0,

        0,

        this.canvas.width,

        this.canvas.height

      ); //绘制视频

      this.timer = window.requestAnimationFrame(this.drawCanvas);

    },

    play() {

      //播放暂停

      if (this.refDom.paused) {

        this.refDom.play();

        this.isPlay = false;

      } else {

        this.refDom.pause();

        this.isPlay = true;

      }

    },

    fullScreen() {

      if (this.isFixed == "fixed") {

        //如果全屏退出全屏

        this.isFixed = "relative";

        // this.isCanvas = false;

        // window.cancelAnimationFrame(this.timer);

      } else {

        this.isFixed = "fixed";

        // this.isCanvas = true;

        // this.getCanvasInit();

      }

    },

    ended(e) {

      this.$emit("flvEnded", true);

    },

    seeking(e) {

      // console.log(e);

      this.isLoading = true;

    },

    seeked(e) {

      this.isLoading = false;


      // console.log(e);

    },

    error(e) {

      let err = e.target.error;

      console.error(err);


      if (err.code == 4) {

        //error.code; //1.用户终止 2.网络错误 3.解码错误 4.URL无效

        if (this.flvVideoCode == "flv") {

          //如果是格式错误,尝试切换格式播放

          this.flvVideoCode = "mp4";

          console.warn("尝试切换mp4格式播放");

        } else {

          console.warn("尝试切换flv格式播放");

          this.flvVideoCode = "flv";

        }

        this.reloadUrl();

      }

      this.isLoading = false;

    },

    loadstart() {

      this.isLoading = true;

    },

    timeupdate(e) {

      //播放进度更新回调

      let dom = e.target;

      // 视频时长

      this.duration = dom.duration || 1;

      // currentTime 当前播放时长

      this.currentDuration = dom.currentTime;

      //当前缓冲进度时长结束位置

      let buffLength = dom.buffered.length;

      if (buffLength != 0) {

        var currentBuffer = dom.buffered.end(buffLength - 1);

        var percentage = (100 * currentBuffer) / this.duration;

        this.getBuffPrecent = percentage;

      }

      if (this.isNotDrag) {

        this.getCurrentDurationPercent =

          (this.currentDuration / this.duration) * 100;

      }

    },

    initPlay() {

      let defintion = localStorage.getItem("flv_defintion");

      if (!!defintion) {

        //如果本地保存了清晰度自动选择之前清晰度,否则加载第一个


        this.insertScriptTag(() => {

          this.init(this.VideoUrl[defintion]);

        });

      } else {

        this.insertScriptTag(() => {

          this.init(this.VideoUrl[0]);

        });

      }

    },

    insertScriptTag(cb) {

      const _this = this;

      let playerScriptTag = document.getElementById("playerScriptTag");

      // 如果这个tag不存在,则生成相关代码tag以加载代码

      if (playerScriptTag === null) {

        playerScriptTag = document.createElement("script");

        playerScriptTag.type = "text/javascript";

        playerScriptTag.id = "playerScriptTag";

        let s = document.getElementsByTagName("head")[0];

        playerScriptTag.onload = playerScriptTag.onreadystatechange = function () {

          if (

            !this.readyState ||

            this.readyState === "loaded" ||

            this.readyState === "complete"

          ) {

            cb && cb();

            playerScriptTag.onload = playerScriptTag.onreadystatechange = null;

          }

        };

        playerScriptTag.src = this.flvSdkPath;

        s.appendChild(playerScriptTag);

      } else {

        cb && cb();

      }

    },

  },

  mounted() {

    // console.log(this.VideoUrl);

    if (this.VideoUrl.length == 0) {

      return new Error("未输入地址");

    }

    this.flvVideoCode = this.VideoCode;

    this.insertScriptTag(() => {

      this.initPlay();

    });

  },

};

</script>

<style scoped>

/*video样式*/

.video-box {

  top: 0;

  left: 0;

  overflow: hidden;

  background: #000;

  width: 100%;

  height: 100%;

  z-index: 999;

}

.video-box-body {

  position: relative;

  width: 100%;

  height: 100%;

  overflow: hidden;

}

.video-body {

  position: absolute;

  left: 0;

  top: 0;

  width: 100%;

  height: 100%;

  z-index: 15;

}

#canvas {

  width: 80%;

  left: 10%;

}

/*控制条样式*/

.video-control {

  display: flex;

  position: absolute;

  width: 100%;

  height: 60px;

  padding: 5px;

  line-height: 50px;

  background: rgba(0, 0, 0, 0.5);

  box-shadow: 0 1px 15px 15px rgba(0, 0, 0, 0.5);

  transition-duration: 300ms;

  z-index: 999;

  left: 0;

  bottom: 0;

}

.control-leftview {

  display: flex;

  position: relative;

  z-index: 5;

  width: 120px;

}

.control-btn {

  display: inline-block;

  width: 25px;

  height: 25px;

  background: rgba(256, 256, 256, 0.5);

  cursor: pointer;

}

.control-leftview .control-btn {

  margin-right: 10px;

}

.progress-box {

  width: 85%;

  height: 50px;

  padding-right: 20px;

}

.progress-box-body {

  display: flex;


  width: 100%;

  height: 100%;

}

.current-time,

.duration-time {

  width: 60px;

  text-align: center;

  color: #fff;

}

.current-time {

  margin-right: -60px;

  position: relative;

  z-index: 5;

}

.duration-time {

  margin-left: -60px;

  position: relative;

  z-index: 5;

}

.durationbar-box {

  position: relative;

  width: 100%;

  padding: 0 70px;

}

.durationbar {

  width: 100%;

  height: 6px;

  margin-top: 23px;

  background: #fff;

  border-radius: 50px;

  position: relative;

}

.bufferbar,

.currentbar {

  position: absolute;

  left: 0;

  top: 0;

  height: 100%;

  width: 0;

  background: rgba(0, 0, 0, 0.3);

  border-radius: 50px;

  z-index: 5;

  cursor: pointer;

}

.currentbar {

  background: linear-gradient(to right, #a7bfe8, #6190e8);

  z-index: 10;

}

.drawbar {

  position: absolute;

  background: #fff;

  width: 20px;

  height: 20px;

  left: 0;

  top: -5px;

  z-index: 10;

  margin-left: -4px;

  border-radius: 50px;

  cursor: pointer;

  background-color: transparent;

  background-image: url("../assets/image/thumbs-sprite.png");

  background-position: 0 0;

  background-size: cover;

  transform: scale(1.9) rotateZ(10deg);

}

.drawbar_active {

  background-position: 100% 0px;

}

.control-rightview {

  cursor: pointer;

  position: relative;

  width: 460px;

  z-index: 5;

}

.speed {

  display: inline-block;

  width: 40px;

  color: #fff;

  font-size: 16px;

}

.defintion {

  display: inline-block;

  color: #fff;

  font-size: 14px;

  width: 40px;

}

.isActive {

  color: coral;

}

.leavel {

  cursor: pointer;

}

.speed-wrap {

  position: absolute;

  bottom: 50px;

  left: 44px;

  background: rgba(0, 0, 0, 0.5);

  color: #fff;

  padding: 0 10px;

  border-radius: 6px;

  line-height: 30px;

  font-size: 16px;

}

.defintion-wrap {

  position: absolute;

  bottom: 50px;

  left: -10px;

  background: rgba(0, 0, 0, 0.5);

  color: #fff;

  padding: 0 10px;

  border-radius: 6px;

  line-height: 30px;

  font-size: 16px;

}

.control-rightview .control-btn {

  margin-left: 10px;

  vertical-align: middle;

}

.control-leftview .control-btn:last-child,

.control-rightview .control-btn:first-child {

  margin: 0;

}

.control-btn.loadbtn {

  /* background: url(../img/load.png) no-repeat center; */

  background-size: 100%;

}

.control-btn.playbtn {

  width: 50px;

  height: 50px;

  background: url("../assets/image/pause.png") no-repeat center;

  background-size: 100%;

}

.control-btn.playbtn.pausebtn {

  background: url("data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjZmZmZmZmIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik04IDV2MTRsMTEtN3oiLz4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KPC9zdmc+Cg==")

    no-repeat center;


  background-size: 100%;

}

.control-btn.mutedbtn {

  background: url("data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjZmZmZmZmIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik0zIDl2Nmg0bDUgNVY0TDcgOUgzem0xMy41IDNjMC0xLjc3LTEuMDItMy4yOS0yLjUtNC4wM3Y4LjA1YzEuNDgtLjczIDIuNS0yLjI1IDIuNS00LjAyek0xNCAzLjIzdjIuMDZjMi44OS44NiA1IDMuNTQgNSA2Ljcxcy0yLjExIDUuODUtNSA2LjcxdjIuMDZjNC4wMS0uOTEgNy00LjQ5IDctOC43N3MtMi45OS03Ljg2LTctOC43N3oiLz4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KPC9zdmc+Cg==")

    no-repeat center;

  background-size: 100%;

}

.control-btn.muted {

  background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACZklEQVR4Xu2avy4FQRTGvxM9SomSChGVRCehUQkJiV6vEjrUXkNF4s8TeAQVFRoPIPECnxyZm6yxu7PuWHd2z2xzczN39u73m++c+bNHYPwS4/qRAWQHGCeQQ8C4AUaTBEluAFgGcCEiL6MchH8NAZIzAI4B7DvRNyKybQIAyQMnfqooWET+dRB82K3/Ocl1AEcA9PPH1VsAJHWk1e468pVXLwGQ1BhX8RrztVevAJBccXbfDAkftPcCAMlxJ1xjfaypeP1d5wGQ3HN2X/yN8KQcQHIHwAmA+WFExPQZuQNIqvDTGBExfVMA8ABgKUZETN8UADBGQGzfDGDUS2GS2QGxNo7pXxcChdlpGsA9gMPQ9tntOM8BrAF4BXArImdVzyipOqBidnoEsCsiT2WCSM4BuCyZzrXPVelmLGEAVbNTKYQa8ar7UUQWugbgHcBkhXW/QQiI11t8iMhE1wBcA9iqyS9fEFx7me2LXStPnlLOAbqVvgssz5+dytkAqM2q5JksABXUwNqhCag2aX7tRlNNggNlERCC4jsBYEgnNBLfGQAFCJoT6uJdf6p5QWO+dK3gx0zyIeCFgk0AQ+SB/oTAEOIHpmkEIekQiBDfGEKyANyuzu5CiKT5pbD5zZD57XDZcb2dAxG3+hu8sLF3JBba5v1Ve7LT4F8JDN0nAyBp/tWY7ZejXra193o8lCRC7b0okAiJDLWbLpEpwjFbJOU7xGyZnOcGu4WSHgibpbIlYWGzWNpzg91yeQ/Eqvv+Fqr4CE3Bse2tl8vHPmDb/TOAtgmnfv/sgNRHqO3nyw5om3Dq9/8EUtNyUHSPJr8AAAAASUVORK5CYII=")

    no-repeat center;

  background-size: 100%;

}

.control-btn.fullscreenbar {

  background: url("data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjZmZmZmZmIiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICAgIDxwYXRoIGQ9Ik0wIDBoMjR2MjRIMHoiIGZpbGw9Im5vbmUiLz4KICAgIDxwYXRoIGQ9Ik03IDE0SDV2NWg1di0ySDd2LTN6bS0yLTRoMlY3aDNWNUg1djV6bTEyIDdoLTN2Mmg1di01aC0ydjN6TTE0IDV2MmgzdjNoMlY1aC01eiIvPgo8L3N2Zz4K")

    no-repeat center;

  background-size: 100%;

}

.control-btn.mime {

  line-height: 25px;

  background: none;

  color: #fff;

}

.bar-input {

  position: absolute;

  height: 100%;

  left: 0;

  right: 0;

  margin: auto;

  width: 100%;

  opacity: 0;

  z-index: 999;

  cursor: pointer;

}

.volumn-btn-wrap {

  position: relative;

  display: inline-block;

  width: 120px;

}

/* .volumn-btn-slider{

  

} */

.volumn-btn {

  position: absolute;

  left: 0;

  top: 20px;

  height: 20px;

  width: 20px;

  transform: translateY(0px);

  background: #fff;

  border-radius: 15px;

  border: 5px solid #6190e8;

  z-index: -1;

}

.volume-input {

  height: 100%;

  width: 100%;

  /* opacity: 0; */

  z-index: 999;

  cursor: pointer;

}

.loader {

  width: 140px;

  height: 140px;

  /* border: 1px solid red; */

  text-align: center;

  position: absolute;

  top: calc(50% - 70px);

  left: calc(50% - 70px);

  padding-top: 15px;

  z-index: 9999;

  background-color: rgba(0, 0, 0, 0.5);

  border-radius: 5px;

}


#loader-1 {

  width: 60px;

  height: 60px;

}

svg path,

svg rect {

  fill: #17a085;

}

.load-msg {

  height: 50px;

  line-height: 50px;

  color: #fff;

  font-size: 13px;

  /* margin-top: 20px; */

}

.volume-input {

  /*-webkit-box-shadow: 0 1px 0 0px #424242, 0 1px 0 #060607 inset, 0px 2px 10px 0px black inset, 1px 0px 2px rgba(0, 0, 0, 0.4) inset, 0 0px 1px rgba(0, 0, 0, 0.6) inset;*/

  -webkit-appearance: none; /*去除默认样式*/

  margin-top: 24px;

  background-color: #ebeff4;

  /*border-radius: 15px;*/

  -webkit-appearance: none;

  height: 4px;

  padding: 0;

  border: none;

  outline: none;

  /*input的长度为80%,margin-left的长度为10%*/

}

.volume-input::-webkit-slider-thumb {

  -webkit-appearance: none; /*去除默认样式*/

  cursor: pointer;

  top: 0;

  height: 20px;

  width: 20px;

  transform: translateY(0px);

  background: #fff;

  border-radius: 15px;

  border: 5px solid #6190e8;

  /*-webkit-box-shadow: 0 -1px 1px #fc7701 inset;*/

}

video:-webkit-full-screen {

  z-index: 9 !important;

  width: 100% !important;

  height: 100% !important;

}

video::-webkit-media-controls {

  display: none !important;

}

.video-progress {

  position: absolute;

  width: 100%;

  left: 0;

  bottom: 0;

  height: 4px;

  z-index: 999999;

}

.video-progress-current {

  position: absolute;

  width: 0%;

  left: 0;

  bottom: 0;

  height: 4px;

  border-radius: 2px;

  background: tomato;

}

</style>