前言:在H5页面实现观看直播+视频回放;在开发期间使用过video.jsmui-player等插件,发现这些video插件对移动端的兼容性都不友好,最后发现一个在移动端兼容不错的插件—— vue-video-player

场景:vue2搭建的移动端H5项目,使用HLS协议以m3u8结尾的直播流

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

一、安装 vue-video-player

播放HLS视频流需要安装 videojs-contrib-hls插件,播放RTMP视频流则安装 videojs-flash插件,hls插件与flash插件同时使用时flash插件需要在hls插件之前引入;(资料上讲安装vue-video-player时会自动安装hls插件,实际操作中并没有,还是自己手动安装吧!)

安装方式1:

CDN方式,直接在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">
  </script>
    <script type="text/javascript"> Vue.use(window.VueVideoPlayer)
  </script>

安装方式2:

点击查看代码

NMP安装插件:
  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事件
}*/)

二、使用 vue-video-player

<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>

直播插件-vue-video-player的更多相关文章

  1. HTML5 Video player jQuery plugin

    <!DOCTYPE html> <html lang="en" > <head> <meta charset="utf-8&qu ...

  2. vue 在浏览器控制台怎么调试 谷歌插件vue Devtools

    vue 在浏览器控制台怎么调试 谷歌插件vue Devtools 问题: vuejs里面的变量,怎么用浏览器的console查看? 例如,想在chrome里用console.log查看变量$data, ...

  3. chrome浏览器的VUE调试插件Vue.js devtools

      chrome浏览器的VUE调试插件Vue.js devtools 应用商店直接安装 安装成功后在VUE文件打开可以直接调试: 提示效果如下: F12进入调试状态即可: 安装中出现的问题: 插件安装 ...

  4. NBA篮球足球在线直播插件下载

    PPlive:点此下载PPLive播放器 Sopcast:点此下载Sopcast播放器 UUSee:点此下载UUSee播放器 CCTVReg:点此下载CCTV插件 PPStream:点此下载PPstr ...

  5. 该网页已屏蔽以下插件Adobe Flash Player

    2017.6.9更新:多谢网友留言,该网页已屏蔽以下插件Adobe Flash Player解决方法:chrome://flags/#run-all-flash-in-allow-mode选择启用就O ...

  6. SublimeText插件vue Syntax Highlight : vue语法高亮

    参考:http://www.cnblogs.com/cosnyang/p/6290950.html Vue.js 的单文件组件(*.vue)在 sublime 编辑器中是不被识别的.若要想高亮显示,需 ...

  7. OBS插件开发以及OBS插件的选择(obs直播插件)研究思路

    obs版本的选择: 工作室版,优化了很多东西,缺点是不能用插件,在部分机型不稳定,因为更新的很频繁.不过这个插件不能用的说法还是停留在早起,截至到今天已经完美支持,所以在不久的将来会越来越好,如果是开 ...

  8. chrome://plugins 无法打开的解决方法,同时解决“该网页已屏蔽插件-adobe flash player”

    chrome打开想要看视频时提示该网页已屏蔽插件-adobe flash player,在网上查了半天说在chrome plugins里面打开就可以了.可是chrome://plugins 无法打开, ...

  9. Embed MP4 in HTML using flash-player(html5 video player)

    https://stackoverflow.com/questions/1000851/embed-mp4-in-html-using-flash-player ******************* ...

  10. Free Video Player All In One

    Free Video Player All In One VLC media player https://github.com/videolan/vlc VideoLAN https://www.v ...

随机推荐

  1. 论文笔记:AlphaEdit: Null-Space Constrained Knowledge Editing for Language Models(AlphaEdit)

      论文发表于人工智能顶会ICLR(原文链接).基于定位和修改的模型编辑方法(针对ROME和MEMIT等)会破坏LLM中最初保存的知识,特别是在顺序编辑场景.为此,本文提出AlphaEdit:   1 ...

  2. react开发组件并发包到npm

    Toast组件 import ReactDomCli from 'react-dom/client'; import './style.css' import React from 'react'; ...

  3. leetcode 468 验证IP地址

    简介 使用优雅的正则表达式 5种情况 情况: 块只包含一位数字,范围是 0 到 9. 块包含两位数字,第一位的范围是 1 到 9,第二位是 0 到 9. 块包含三位数字,且第一位为 1.第二.三位可以 ...

  4. Markdown常用emoji表情

    .emoji { width: 45px } #emojilist { margin: 0 auto; text-align: center } #emojilist li { float: left ...

  5. ETL数据集成丨将SQL Server数据同步至Oracle的具体实现

    一.背景 在构建企业级数据架构时,将SQL Server数据库的数据同步至数仓数据库(如Oracle)是一项至关重要的任务.这一过程不仅促进了跨系统数据的一致性与可用性,还为数据分析.商业智能以及决策 ...

  6. Management-DecisionMaking-Leadership:{Rational,BoundedRational,Intuitive,EvidenceBasedManagerial,Crowdsourcing} D.M.

    Rational VS Intuitive VS EBM VS CS: 例如:当经济不景气时期,亲戚聚会时,面对一落难亲戚, 尽管风传外面有破产负债,但确实没害过亲朋好友做过,怎么决策: Intuit ...

  7. SpringBoot--如何创建自己的自动配置

    在实际开发中,仅靠SpringBoot的自动配置是远远不够的,比如要访问多个数据源,自动配置就完全无能为力了. 自动配置的本质 本质就是在容器中预配置要整合的框架所需的基础Bean. 以MyBatis ...

  8. Unity编辑器调用外部exe程序 和 windows文件夹

    直接来,1个脚本 using System.Collections; using System.Collections.Generic; using System.Diagnostics; using ...

  9. 13Java基础之final关键字、常量详解

    final关键字 final关键字是最终的意思,可以修饰(类.方法.变量) 修饰类:该类被称为最终类,特点是不能被继承了.例如工具类. 修饰方法:该方法被称为最终方法,特点是不能被重写了. 修饰变量: ...

  10. 企业网盘哪个好用?深度解析TOP5产品

    无论是共享文档.同步文件还是提升数据安全性,一个优秀的企业网盘不仅能优化团队效率,还能在数据管控中带来更大的安心.那么,在众多的企业网盘工具中,究竟哪些产品更值得选择呢? Zoho网盘 功能亮点 Zo ...