Vue结合Video.js播放m3u8视频流的方法示例


Posted in Javascript onMay 04, 2018

首先,我们需要在vue工程中安装video.js相关依赖。

npm install --save video.js
npm install --save videojs-contrib-hls

然后,我们需要引入videojs的css文件,例如在main.js中引入

import 'video.js/dist/video-js.css'

接着,我们在需要播放视频的页面引入js对象

import videojs from 'video.js'
import 'videojs-contrib-hls'

指定一个video容器,例如:

<video id="my-video" class="video-js vjs-default-skin" controls preload="auto" poster="../assets/video.png">
 <source src="http://127.0.0.1:7086/aaa/213/stream/1.m3u8" type="application/x-mpegURL">
</video>

最后,我们在mounted节点初始化播放器:

videojs('my-video', {
 bigPlayButton: false,
 textTrackDisplay: false,
 posterImage: true,
 errorDisplay: false,
 controlBar: true
}, function () {
 this.play()
})

Video.js中m3u8视频清晰度切换

完成测试代码 

<!DOCTYPE HTML> 
<html> 
<head> 
 <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
 <title>视频控制</title> 
 <link href="https://unpkg.com/video.js/dist/video-js.css" rel="external nofollow" rel="stylesheet"> 
 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script> 
 <script src="https://unpkg.com/video.js/dist/video.js"></script> 
 <script src="https://unpkg.com/videojs-contrib-hls/dist/videojs-contrib-hls.js"></script> 
</head>  
<body> 
 <video id="my_video_1" class="video-js vjs-default-skin" controls preload="auto" width="640" height="268"  
 data-setup='{}'> 
 <source src="http://localhost/video/c/1928.m3u8" type="application/x-mpegURL"> 
 </video> 
<br/>  
</body>  
<script type="text/javascript">  
 window.onload=function(){   
 var videoPanelMenu = $(".vjs-fullscreen-control"); 
  videoPanelMenu.before('<div class="vjs-subs-caps-button vjs-menu-button vjs-menu-button-popup vjs-control vjs-button" aria-live="polite" aria-expanded="false" aria-haspopup="true">' 
  + '<div class="vjs-menu" role="presentation">' 
  + '<ul class="vjs-menu-content" role="menu">' 
  + '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="changeVideo(1)">普通</li>' 
  + '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="changeVideo(2)">标清 </li>' 
  + '<li class="vjs-menu-item" tabindex="-1" role="menuitemcheckbox" onclick="changeVideo(3)">高清 </li>' 
  + '</ul></div>' 
  +' <button class="vjs-subs-caps-button vjs-control vjs-button" type="button" aria-live="polite" title="清晰度切换" aria-disabled="false">' 
  +'  <span aria-hidden="true" class="vjs-icon-placeholder"></span><span class="vjs-control-text">清晰度切换</span>' 
  +' </button>' 
  +'</div>' 
  ); 
   
 var obj={tag:false,ctime:0}; 
 window.obj=obj; 
 var myPlayer=videojs.getPlayers()['my_video_1']; 
  myPlayer.on("timeupdate", function(){ 
    if(window.obj.tag){ 
   videojs("my_video_1").currentTime(window.obj.ctime) 
   videojs("my_video_1").play(); 
   window.obj.tag=false; 
  } 
   
  //视频打点 
  var ctime_=videojs("my_video_1").currentTime().currentTime(); 
  if(ctime_==60){ 
   videojs("my_video_1").currentTime(ctime_+1); 
   //do something 
  }  
 });  
} 
 
 function changeVideo(type){ 
  var ctime=videojs("my_video_1").currentTime();  
  if(type==1){ 
  videojs("my_video_1").src([{type: "application/x-mpegURL", src: "http://localhost/video/LD/1928.m3u8" }]); 
  videojs("my_video_1").play();  
  } 
  if(type==2){ 
  videojs("my_video_1").src([{type: "application/x-mpegURL", src: "http://localhost/video/C/1928.m3u8" }]);  
  videojs("my_video_1").play(); 
 
  } 
  if(type==3){ 
  videojs("my_video_1").src([{type: "application/x-mpegURL", src: "http://localhost/video/HD/1928.m3u8" }]);  
  videojs("my_video_1").play(); 
  } 
  window.obj.ctime=ctime; 
  window.obj.tag=true; 
 } 
 </script> 
</html>

以上就是如题最简单的实现,更多需求请自行阅读video.js相关api或者持续关注。也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
Aug 03 Javascript
firefox firebug中文入门教程 脚本之家新年特别版
Jan 02 Javascript
Jquery倒数计时按钮setTimeout的实例代码
Jul 04 Javascript
禁用页面部分JavaScript方法的具体实现
Jul 31 Javascript
做web开发 先学JavaScript
Dec 12 Javascript
jQuery中replaceAll()方法用法实例
Jan 16 Javascript
JavaScript数据结构和算法之图和图算法
Feb 11 Javascript
详解使用nvm管理多版本node的方法
Aug 30 Javascript
小程序清理本地缓存的方法
Aug 17 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 Javascript
jQuery实现的记住帐号密码功能完整示例
Aug 03 jQuery
微信小程序如何连接Java后台
Aug 08 Javascript
原生javascript AJAX 三级联动的实现代码
May 04 #Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
May 04 #Javascript
vue裁切预览组件功能的实现步骤
May 04 #Javascript
详解vue组件基础
May 04 #Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
May 04 #Javascript
[原创]jquery判断元素内容是否为空的方法
May 04 #jQuery
Vue.js 踩坑记之双向绑定
May 03 #Javascript
You might like
新52大事件
2020/03/03 欧美动漫
php上的memcache和memcached两个pecl库
2010/03/29 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
jQuery制作简洁的多级联动Select下拉框
2014/12/23 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
详解nodejs与javascript中的aes加密
2016/05/22 NodeJs
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
ECMAScript6 新特性范例大全
2017/03/24 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
React Native实现进度条弹框的示例代码
2017/07/17 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
python类参数self使用示例
2014/02/17 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
django rest framework 自定义返回方式
2020/07/12 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
物业公司采购员岗位职责
2013/12/31 职场文书
医药销售自我评价200字
2014/09/11 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
2014年材料员工作总结
2014/11/19 职场文书
2014年民警工作总结
2014/11/25 职场文书
七年级生物教学反思
2016/02/20 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL
Typescript类型系统FLOW静态检查基本规范
2022/05/25 Javascript
Python安装及建立虚拟环境的完整步骤
2022/06/25 Servers