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 相关文章推荐
扩展String功能方法
Sep 22 Javascript
js getElementsByTagName的简写方式
Jun 27 Javascript
JS动态增加删除UL节点LI及相关内容示例
May 21 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
Apr 06 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
Nov 24 Javascript
简单实现jQuery手风琴效果
Aug 18 jQuery
详解js正则表达式验证时间格式xxxx-xx-xx形式
Feb 09 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
Sep 30 Javascript
Vue中用props给data赋初始值遇到的问题解决
Nov 27 Javascript
JavaScript 继承 封装 多态实现及原理详解
Jul 29 Javascript
vue draggable resizable gorkys与v-chart使用与总结
Sep 05 Javascript
TypeScript 使用 Tuple Union 声明函数重载
Apr 07 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套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
php简单防盗链实现方法
2015/07/29 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
PHP 7.4 新语法之箭头函数实例详解
2019/05/09 PHP
PHP7.0连接DB操作实例分析【基于mysqli】
2019/09/26 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
JavaScript游戏之优化篇
2010/11/08 Javascript
cookie的secure属性详解
2015/04/08 Javascript
javascript中replace( )方法的使用
2015/04/24 Javascript
jQuery实现返回顶部效果的方法
2015/05/29 Javascript
简单了解JavaScript操作XPath的一些基本方法
2016/06/03 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
用vue构建多页面应用的示例代码
2017/09/20 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
arctext.js实现文字平滑弯曲弧形效果的插件
2019/05/13 Javascript
[51:11]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS DT
2014/05/22 DOTA
多版本Python共存的配置方法
2017/05/22 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
python绘制多个曲线的折线图
2020/03/23 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
2018/10/14 Python
解决安装pycharm后不能执行python脚本的问题
2019/01/19 Python
scrapy-redis分布式爬虫的搭建过程(理论篇)
2020/09/29 Python
世界领先的高品质定制产品平台:Zazzle
2017/07/23 全球购物
长曲棍球装备:Lacrosse Monkey
2020/12/02 全球购物
营业员个人总结的自我评价
2013/10/25 职场文书
大学活动策划书范文
2014/01/10 职场文书
企业军训感想
2014/02/07 职场文书
文明礼仪演讲稿
2014/05/12 职场文书
学校安全生产承诺书
2014/05/23 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
学校财务管理制度
2015/08/04 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android