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 datepicker 使用方法
May 20 Javascript
js自动下载文件到本地的实现代码
Apr 28 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
Jan 03 Javascript
JavaScript中的数学运算介绍
Dec 29 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
Apr 29 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 Javascript
JS本地刷新返回上一页代码
Jul 25 Javascript
laydate.js日期时间选择插件
Jan 04 Javascript
详解JavaScript树结构
Jan 09 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
vue2.0结合Element-ui实战案例
Mar 06 Javascript
vue从零实现一个消息通知组件的方法详解
Mar 16 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环境――Appserv
2006/12/13 PHP
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
特详细的PHPMYADMIN简明安装教程
2008/08/01 PHP
功能强大的php分页函数
2016/07/20 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
2018/06/06 PHP
PHP常用的类封装小结【4个工具类】
2019/06/28 PHP
利用jQuery 实现GridView异步排序、分页的代码
2010/02/06 Javascript
菜鸟javascript基础整理1
2010/12/06 Javascript
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
extjs实现选择多表自定义查询功能 前台部分(ext源码)
2011/12/20 Javascript
使用POST方式弹出窗口的两种方法示例介绍
2014/01/29 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
js使用Array.prototype.sort()对数组对象排序的方法
2015/01/28 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
jQuery使用drag效果实现自由拖拽div
2015/06/11 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
vue-cli中使用高德地图的方法示例
2019/03/28 Javascript
vue通过过滤器实现数据格式化
2020/07/20 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
python下载文件记录黑名单的实现代码
2017/10/24 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python 文件数据读写的具体实现
2020/01/24 Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
2020/02/19 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
HTML5 图片预加载的示例代码
2020/03/25 HTML / CSS
大学生怎样写好自荐信
2014/02/25 职场文书
防暑降温通知书
2015/04/27 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android