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 相关文章推荐
jQuery 行级解析读取XML文件(附源码)
Oct 12 Javascript
JQuery文本框高亮显示插件代码
Apr 02 Javascript
window.opener用法和用途实例介绍
Aug 19 Javascript
javascript中声明函数的方法及调用函数的返回值
Jul 22 Javascript
node.js中的fs.lchmod方法使用说明
Dec 16 Javascript
详解AngularJS中的表达式使用
Jun 16 Javascript
Webpack 实现 Node.js 代码热替换
Oct 22 Javascript
浅谈js中对象的使用
Aug 11 Javascript
完美解决js传递参数中加号和&amp;号自动改变的方法
Oct 11 Javascript
bootstrap滚动监控器使用方法解析
Jan 13 Javascript
Ant Design的Table组件去除
Oct 24 Javascript
vue前端和Django后端如何查询一定时间段内的数据
Feb 28 Vue.js
原生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采集时被封ip的解决方法
2010/08/29 PHP
PHP图片处理之使用imagecopyresampled函数裁剪图片例子
2014/11/19 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
2016/06/13 PHP
php 人员权限管理(RBAC)实例(推荐)
2017/05/24 PHP
php简单构造json多维数组的方法示例
2017/06/08 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
php实现对短信验证码发送次数的限制实例讲解
2021/03/04 PHP
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery实现的瀑布流加载效果示例
2016/09/13 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
基于vue+axios+lrz.js微信端图片压缩上传方法
2019/06/25 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
Vue+Bootstrap收藏(点赞)功能逻辑与具体实现
2020/10/22 Javascript
python函数的5种参数详解
2017/02/24 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
canvas需要在标签里直接定义宽高
2014/12/17 HTML / CSS
Calzedonia美国官网:意大利风格袜子、打底裤和沙滩装
2018/07/19 全球购物
智能室内花园:Click & Grow
2021/01/29 全球购物
介绍一下Python下range()函数的用法
2013/11/07 面试题
优秀党支部书记事迹材料
2014/05/29 职场文书
支行行长竞聘报告
2014/11/06 职场文书
技术支持岗位职责
2015/02/13 职场文书
幼儿园小朋友毕业感言
2015/07/30 职场文书
幼儿园迎新生欢迎词
2015/09/30 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
APP界面设计技巧和注意事项
2022/04/29 杂记