vue2.0+vue-dplayer实现hls播放的示例


Posted in Javascript onMarch 02, 2018

起因

之前写了一篇《 vue2.0+vue-video-player实现hls播放》,里边有提到在用vue-video-player之前,我尝试着使用vue-dplayer实现hls播放,但是当时时间紧迫,还没有完成,就换方案了。现在抽时间把它补齐吧。

开始

安装依赖

npm install vue-dplayer -S

编写组件HelloWorld.vue

<template>
 <div class="hello">
  <d-player ref="player" @play="play" :video="video" :contextmenu="contextmenu"></d-player>
 </div>
</template>

<script>
import VueDPlayer from './VueDPlayerHls';
export default {
 name: 'HelloWorld',
 data () {
  return {
   msg: 'Welcome to Your Vue.js App',
   video: {
     url: 'https://logos-channel.scaleengine.net/logos-channel/live/biblescreen-ad-free/chunklist_w630020335.m3u8',
     pic: 'http://static.smartisanos.cn/pr/img/video/video_03_cc87ce5bdb.jpg',
     type: 'hls'
    },
    autoplay: false,
    player: null,
    contextmenu: [
      {
        text: 'GitHub',
        link: 'https://github.com/MoePlayer/vue-dplayer'
      }
    ]
  }
 },
 components: {
  'd-player': VueDPlayer
 },
 methods: {
  play() {
    console.log('play callback')
   }
 },
 mounted() {
  this.player = this.$refs.player.dp;
  // console.log(this.player);
  var hls = new Hls();
  hls.loadSource('https://logos-channel.scaleengine.net/logos-channel/live/biblescreen-ad-free/chunklist_w630020335.m3u8');
  hls.attachMedia(this.player);
 }
}
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>

引入hls.js

本来是使用import引入,可是执行报错。所以就先在index.html内用script标签引入进来。

<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width,initial-scale=1.0">
  <title>vue-dplayer-hls</title>
 </head>
 <body>
  <div id="app"></div>
  <!-- built files will be auto injected -->
  <script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
 </body>
</html>

注意:

根据DPlayer Demo页面代码,想支持hls,需要将video.type 设置为”hls”,但是我修改之后发现无法播放。于是去看了源码,发现源码内有这样一处:

vue2.0+vue-dplayer实现hls播放的示例

也就是说不论你在自己的组件内填写的是什么,其实都是使用的'normal'来new的Dplayer实例。

修改源码

自定义一个组件VueDPlayerHls.vue,然后copy源代码,问题处修改为: type: this.video.type

<template>
 <div class="dplayer"></div>
</template>

<script>
 require('../../node_modules/dplayer/dist/DPlayer.min.css');
 import DPlayer from 'DPlayer'
 export default {
  props: {
   autoplay: {
    type: Boolean,
    default: false
   },
   theme: {
    type: String,
    default: '#FADFA3'
   },
   loop: {
    type: Boolean,
    default: true
   },
   lang: {
    type: String,
    default: 'zh'
   },
   screenshot: {
    type: Boolean,
    default: false
   },
   hotkey: {
    type: Boolean,
    default: true
   },
   preload: {
    type: String,
    default: 'auto'
   },
   contextmenu: {
    type: Array
   },
   logo: {
    type: String
   },
   video: {
    type: Object,
    required: true,
    validator(value) {
     return typeof value.url === 'string'
    }
   }
  },
  data() {
   return {
    dp: null
   }
  },
  mounted() {
   const player = this.dp = new DPlayer({
    element: this.$el,
    autoplay: this.autoplay,
    theme: this.theme,
    loop: this.loop,
    lang: this.lang,
    screenshot: this.screenshot,
    hotkey: this.hotkey,
    preload: this.preload,
    contextmenu: this.contextmenu,
    logo: this.logo,
    video: {
     url: this.video.url,
     pic: this.video.pic,
     type: this.video.type
    }
   })
   player.on('play', () => {
    this.$emit('play')
   })
   player.on('pause', () => {
    this.$emit('pause')
   })
   player.on('canplay', () => {
    this.$emit('canplay')
   })
   player.on('playing', () => {
    this.$emit('playing')
   })
   player.on('ended', () => {
    this.$emit('ended')
   })
   player.on('error', () => {
    this.$emit('error')
   })
  }
 }
</script>

在原组件(HelloWorld.vue)内import新组件

import VueDPlayer from './VueDPlayerHls';

实现播放

vue2.0+vue-dplayer实现hls播放的示例

最后

github地址:https://github.com/PhillCheng/vue-dplayer-hls

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 鼠标滚轮事件
Apr 09 Javascript
js DOM模型操作
Dec 28 Javascript
js字符串转换成xml对象并使用技巧解读
Apr 18 Javascript
关于JavaScript对象的动态选择及遍历对象
Mar 10 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
Mar 05 Javascript
在Node.js应用中使用Redis的方法简介
Jun 24 Javascript
javascript中setInterval的用法
Jul 19 Javascript
js实现左侧网页tab滑动门效果代码
Sep 06 Javascript
表单元素值获取方式js及java方式的简单实例
Oct 15 Javascript
js 实现复选框只能选择一项的示例代码
Jan 23 Javascript
浅谈微信页面入口文件被缓存解决方案
Sep 29 Javascript
微信小程序签到功能
Oct 31 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
Mar 02 #Javascript
vue2.0 + element UI 中 el-table 数据导出Excel的方法
Mar 02 #Javascript
浅谈FastClick 填坑及源码解析
Mar 02 #Javascript
利用vue和element-ui设置表格内容分页的实例
Mar 02 #Javascript
vue将时间戳转换成自定义时间格式的方法
Mar 02 #Javascript
Element-ui table中过滤条件变更表格内容的方法
Mar 02 #Javascript
使用vue-aplayer插件时出现的问题的解决
Mar 02 #Javascript
You might like
杏林同学录(一)
2006/10/09 PHP
WHOIS类的修改版
2006/10/09 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
setInterval与clearInterval的使用示例代码
2014/01/28 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
javascript日期验证之输入日期大于等于当前日期
2015/12/13 Javascript
angularjs 源码解析之scope
2016/08/22 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
对angular2中的ngfor和ngif指令嵌套实例讲解
2018/09/12 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
Javascript模拟实现new原理解析
2020/03/03 Javascript
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
python 实现数组list 添加、修改、删除的方法
2018/04/04 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
python实现图片九宫格分割
2021/03/07 Python
python实现画出e指数函数的图像
2019/11/21 Python
Python实现寻找回文数字过程解析
2020/06/09 Python
python如何实现递归转非递归
2021/02/25 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
Spartoo瑞典:鞋子、包包和衣服
2018/09/15 全球购物
工程师求职简历的自我评价分享
2013/10/10 职场文书
大学毕业感言
2014/01/10 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
单位租房协议书样本
2014/10/30 职场文书
安全先进班组材料
2014/12/26 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
入党积极分子培养人意见
2015/06/02 职场文书
网络营销实训总结
2015/08/03 职场文书
python实现对doc、txt、xls等文档的读写操作
2022/04/02 Python
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android