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中.add()的使用分析
Apr 26 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
Nov 26 Javascript
js加减乘除丢失精度问题解决方法
May 16 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
vue指令以及dom操作详解
Mar 04 Javascript
ES6生成器用法实例分析
Apr 10 Javascript
详解vue express启动数据服务
Jul 05 Javascript
javascript 开发之网页兼容各种浏览器
Sep 28 Javascript
微信小程序的日期选择器的实例详解
Sep 29 Javascript
JavaScript 日期时间选择器一些小结
Apr 02 Javascript
Node.js学习教程之Module模块
Sep 03 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
Sep 27 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函数
2006/10/09 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHP设计模式之单例模式原理与实现方法分析
2018/04/25 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
javascript知识点收藏
2007/02/22 Javascript
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
jquery中EasyUI使用技巧小结
2015/02/10 Javascript
简单纯js实现点击切换TAB标签实例
2015/08/23 Javascript
JQuery之proxy实现绑定代理方法
2016/08/01 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
jQuery的事件预绑定
2016/12/05 Javascript
Vue中自定义全局组件的实现方法
2017/12/08 Javascript
深入浅析JSONAPI在PHP中的应用
2017/12/24 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
2018/08/17 Javascript
Puppeteer 爬取动态生成的网页实战
2018/11/14 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
js this 绑定机制深入详解
2020/04/30 Javascript
微信小程序多列表渲染数据开关互不影响的实现
2020/06/05 Javascript
vue form表单post请求结合Servlet实现文件上传功能
2021/01/22 Vue.js
javascript实现数字时钟效果
2021/02/06 Javascript
[57:47]Fnatic vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
Python字典,函数,全局变量代码解析
2017/12/18 Python
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
基于python实现百度翻译功能
2019/05/09 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
学生个人求职自荐信格式
2013/09/23 职场文书
蔬菜基地的创业计划书
2014/01/06 职场文书
2015年见习期工作总结
2014/12/12 职场文书
六年级学生期末评语
2014/12/26 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android