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小游戏实现代码
Aug 19 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
Dec 04 Javascript
打开新窗口关闭当前页面不弹出关闭提示js代码
Mar 18 Javascript
JS判断表单输入是否为空(示例代码)
Dec 23 Javascript
简介JavaScript中的unshift()方法的使用
Jun 09 Javascript
jquery+ajax实现注册实时验证实例详解
Dec 08 Javascript
JavaScript函数表达式详解及实例
May 05 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
Sep 10 Javascript
解决VUE中document.body.scrollTop为0的问题
Sep 15 Javascript
为nuxt项目写一个面包屑cli工具实现自动生成页面与面包屑配置
Sep 29 Javascript
vue移动端写的拖拽功能示例代码
Sep 09 Javascript
Python机器学习之决策树和随机森林
Jul 15 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中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
php实现无限级分类(递归方法)
2015/08/06 PHP
深入解析PHP中foreach语句控制数组循环的用法
2015/11/30 PHP
PHP小偷程序的设计与实现方法详解
2016/10/15 PHP
PHP中PDO事务处理操作示例
2018/05/02 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
PHP使用PDO创建MySQL数据库、表及插入多条数据操作示例
2019/05/30 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
JQuery 风格的HTML文本转义
2009/07/01 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
2009/12/07 Javascript
juqery 学习之五 文档处理 插入
2011/02/11 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
由点击页面其它地方隐藏div所想到的jQuery的delegate
2013/08/29 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
实现非常简单的js双向数据绑定
2015/11/06 Javascript
浅析Javascript中bind()方法的使用与实现
2016/04/29 Javascript
Javascript的无new构建实例详解
2016/05/15 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
electron 安装,调试,打包的具体使用
2019/11/06 Javascript
Python操作csv文件实例详解
2017/07/31 Python
python生成ppt的方法
2018/06/07 Python
使用TensorFlow实现SVM
2018/09/06 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
毕业晚会主持词
2014/03/24 职场文书
倡议书格式范文
2014/04/14 职场文书
党的群众路线教育实践活动对照检查材料范文
2014/09/24 职场文书
综合素质评价自我评价
2015/03/06 职场文书
师德师风培训感言
2015/08/03 职场文书