视频直播插件----vue-video-player

测试直播链接 https://live.cgtn.com/1000/prog_index.m3u8

一、安装插件

播放HLS视频流需要安装 videojs-contrib-hls插件,播放RTMP视频流则安装 videojs-flash插件,hls插件与flash插件同时使用时flash插件需要在hls插件之前引入; (有时安装we-video-plaver无法自动安装hls插件,还需自己手动安装)

安装方式一:在html文件头部引入

<link rel="stylesheet" href="path/to/video.js/dist/video-js.css"/>

<script type="text/javascript" src="path/to/video.min.js"></script> 

<script type="text/javascript" src="path/to/vue.min.js"></script>

<script type="text/javascript" src="path/to/dist/vue-video-player.js">

安装方式二:npm安装

npm install vue-video-player --save

 npm install videojs-contrib-hls --save

main.js中引入基础样式文件: 

// 引入videoPlayer样式 

import 'video.js/dist/video-js.css' 

按需引入:

 import 'videojs-contrib-hls'

 import { videoPlayer } from 'vue-video-player' 

components: { videoPlayer },

 全局引入: 

import Vue from 'vue' 

import VueVideoPlayer from 'vue-video-player' 

// 自定义样式引入,在<video-player>添加对应类名,例如video-player-custom 

// import 'vue-video-player/src/custom-theme.css'

Vue.use(VueVideoPlayer, /* {   options: 全局默认配置, events: 全局videojs事件 }*/) 

二、使用插件

<template>

  <!-- playsinline:设置播放器在移动设备上不全屏[ Boolean, default: false ] -->

  <!-- customEventName:自定义状态变更时的事件名[ String, default: 'statechanged' ] -->

    <video-player

    class="video-player-custom"

        ref="videoPlayer"

        :options="playerOptions"

        :playsinline="true"

        customEventName="customstatechangedeventname"

        @play="onPlayerPlay"

        @pause="onPlayerPause"

        @ended="onPlayerEnded"

        @ready="playerReadied"

        @statechanged="playerStateChanged"

        @playing="onPlayerPlaying"

        @waiting="onPlayerWaiting"

        @loadeddata="onPlayerLoadeddata"

        @timeupdate="timeupdate"

        @canplay="onPlayerCanplay"

        @canplaythrough="onPlayerCanplaythrough">

    </video-player>

</template>

<script>

import 'videojs-contrib-hls'

import { videoPlayer } from 'vue-video-player'

export default {

   components: {

        videoPlayer

    },

  data() {

    return {

      playerOptions: {

         // 是否静音

                  muted: true,

                  // 默认为英语,设置为中文

                  language: 'zh-CN',

                  // 播放速度,指定后Video.js将显示一个控件(vjs-playback-rate类的控件),允许用户选择播放速度

                  playbackRates: [0.5, 1.0, 1.5, 2.0],

                  // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值,表示长宽比例

                  aspectRatio: '4:3',

             // 兼容顺序,默认值是['html5'],其他已注册的技术将按其注册的顺序在该技术之后添加。

                  techOrder: ['html5'],

                  // 等同于原生<video>标签中的一组<source>子标签,可实现优雅降级;type 属性规定媒体资源的 MIME 类型

                  sources: [

                        //{

                      //type: "video/mp4",

                      //src: ""

                  //},

                        //{

                      //type: "rtmp/flv",

                      //src: ""

                  //},

                  {

                      type: "application/x-mpegURL",

                      src: "https://live.cgtn.com/1000/prog_index.m3u8"

                  },

                  ],

                  // 视频封面

                  poster: require('./icon/cover.jpg'),

       }

    }

  },

  computed: {

    //插件节点 用于添加自定义按钮事件

    player() {

      return this.$refs.videoPlayer.player

    }

  },

    mounted() {},

    methods: {

        // 播放回调

        onPlayerPlay(player) {

        },

        // 暂停回调

        onPlayerPause(player) {

          //console.log(player)

        },

        // 视频播放结束回调

        onPlayerEnded(player) {

          //console.log(player)

        },

        // DOM元素上的readyState更改导致播放停止

        onPlayerWaiting(player) {

          //console.log(player)

        },

        // 已开始播放回调

        onPlayerPlaying(player) {

          //console.log(player)

        },

        // 当播放器在当前播放位置下载数据时触发

        onPlayerLoadeddata($event) {

          //console.log($event)

        },

        // 当前播放位置发生变化时触发。

        onPlayerTimeupdate($event) {

          //console.log($event)

        },

        //媒体的readyState为HAVE_FUTURE_DATA或更高

        onPlayerCanplay($event) {

          //console.log($event)

        },

        //媒体的readyState为HAVE_ENOUGH_DATA或更高。这意味着可以在不缓冲的情况下播放整个媒体文件。

        onPlayerCanplaythrough($event) {

          //console.log($event)

        },

        //播放状态改变回调

        playerStateChanged($event) {

          //console.log($event)

        },

        //将侦听器绑定到组件的就绪状态。与事件监听器的不同之处在于,如果ready事件已经发生,它将立即触发该函数。。

        playerReadied($event) {

          //console.log($event)

        },

    }

}

</script>

<style lang="scss" scoped>

.video-player-custom{

    width: 100%;

    height: 180px;

    // vidoeUI重写

    /deep/ .video-js{

        width: 100%;

        height: 100%;

        padding: 0;

        overflow: hidden;

        // 播放器

        .vjs-tech{

          object-fit: cover;

        }

        // 播放按钮

        .vjs-big-play-button {

            position: absolute;

            top: 50%;

            left: 50%;

            width: 2em;

            height: 2em;

            margin-top: -1em;

            margin-left: -1em;

            font-size: 2em;

            line-height: 2em;

            border-radius: 50%;

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

            outline: none;

        }

        // 封面

        .vjs-poster{

            width: 100%;

            height: 100%;

            background-size: cover;

        }

    }

</style>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容