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 相关文章推荐
js导出excel文件的简洁方法(推荐)
Nov 02 Javascript
JavaScript基本类型值-Undefined、Null、Boolean
Feb 23 Javascript
JavaScript数据结构之二叉树的查找算法示例
Apr 13 Javascript
JavaScript基础之流程控制语句的用法
Aug 31 Javascript
Angularjs使用过滤器完成排序功能
Sep 20 Javascript
vue 注册组件的使用详解
May 05 Javascript
Nuxt升级2.0.0时出现的问题(小结)
Oct 08 Javascript
jQuery轮播图功能制作方法详解
Dec 03 jQuery
vue页面加载时的进度条功能(实例代码)
Jan 13 Javascript
Vue父子传递实例讲解
Feb 14 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 17 Javascript
关于Js中new操作符的作用详解
Feb 21 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
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
php 多关键字 高亮显示实现代码
2012/04/23 PHP
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
2017/02/07 PHP
关于ThinkPHP中的异常处理详解
2018/05/11 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
js为鼠标添加右击事件防止默认的右击菜单弹出
2013/07/29 Javascript
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
利用ES6的Promise.all实现至少请求多长时间的实例
2017/08/28 Javascript
Vue实现带进度条的文件拖动上传功能
2018/02/23 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
简述JS控制台的使用
2018/07/15 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
python脚本设置系统时间的两种方法
2016/02/21 Python
python脚本实现xls(xlsx)转成csv
2016/04/10 Python
Python BS4库的安装与使用详解
2018/08/08 Python
pyQt5实时刷新界面的示例
2019/06/25 Python
Python常用类型转换实现代码实例
2020/07/28 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
HTML5实现经典坦克大战坦克乱走还能发出一个子弹
2013/09/02 HTML / CSS
网络教育自我鉴定
2013/11/01 职场文书
工程学毕业生自荐信
2014/06/14 职场文书
个人主要事迹材料
2014/08/26 职场文书
医德医魂心得体会
2014/09/11 职场文书
教师自我剖析材料范文
2014/09/30 职场文书
农村老人去世追悼词
2015/06/23 职场文书
开学第一周值周总结
2015/07/16 职场文书
2016年校长新年寄语
2015/08/17 职场文书
PHP策略模式写法
2021/04/01 PHP
微软Win11有哪些隐藏功能? windows11多个功能汇总
2021/11/21 数码科技