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 相关文章推荐
JQuery的html(data)方法与&amp;lt;script&amp;gt;脚本块的解决方法
Mar 09 Javascript
javascript 四则运算精度修正函数代码
May 31 Javascript
ExtJS4中的requires使用方法示例介绍
Dec 03 Javascript
JavaScript运行时库属性一览表
Mar 14 Javascript
javascript实现Table间隔色以及选择高亮(和动态切换数据)的方法
May 14 Javascript
JavaScript 消息框效果【实现代码】
Apr 27 Javascript
jQuery表单验证插件解析(推荐)
Jul 21 Javascript
JS制作图形验证码实现代码
Oct 19 Javascript
JavaScript使用readAsDataURL读取图像文件
May 10 Javascript
实例学习JavaScript读取和写入cookie
Jan 29 Javascript
jQuery 实现倒计时天,时,分,秒功能
Jul 31 jQuery
微信小程序dom操作的替代思路实例分析
Dec 06 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
PHP 中执行排序与 MySQL 中排序
2009/04/21 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
2019/06/03 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
你不知道的 javascript【推荐】
2017/01/08 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
Angular.js去除页面中显示的空行方法示例
2017/03/30 Javascript
Node.js中看JavaScript的引用
2017/04/22 Javascript
AngularJS动态绑定ng-options的ng-model实例代码
2017/06/21 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
JavaScript截屏功能的实现代码
2017/07/28 Javascript
vue中SPA单页面应用程序详解
2017/11/07 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
Python中的一些陷阱与技巧小结
2015/07/10 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
Python图像阈值化处理及算法比对实例解析
2020/06/19 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
后勤人员岗位职责
2013/12/17 职场文书
最新奶茶店创业计划书范文
2014/02/08 职场文书
《孔子拜师》教学反思
2014/02/24 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
2014年党务公开方案
2014/05/08 职场文书
教师演讲稿大全
2014/05/16 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
文书工作总结(范文)
2019/07/11 职场文书
导游词之长城八达岭
2019/09/24 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python