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 相关文章推荐
jqeury eval将字符串转换json的方法
Jan 20 Javascript
基于jquery编写的横向自适应幻灯片切换特效的实例代码
Aug 06 Javascript
JavaScript定义变量和变量优先级问题探讨
Oct 11 Javascript
jQuery的图片滑块焦点图插件整理推荐
Dec 07 Javascript
jQuery中判断对象是否存在的方法汇总
Feb 24 Javascript
如何高效率去掉js数组中的重复项
Apr 12 Javascript
jQuery如何封装输入框插件
Aug 19 Javascript
vue 实现全选全不选的示例代码
Mar 29 Javascript
详解封装基础的angular4的request请求方法
Jun 05 Javascript
用Cordova打包Vue项目的方法步骤
Feb 02 Javascript
微信小程序实现获取小程序码和二维码java接口开发
Mar 29 Javascript
node+vue实现文件上传功能
May 28 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
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
PHP简单实现文本计数器的方法
2016/04/28 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
laravel 判断查询数据库返回值的例子
2019/10/11 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
前后台交互过程中json格式如何解析以及如何生成
2012/12/26 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
完美解决jQuery的hover事件在IE中不停闪动的问题
2017/02/10 Javascript
JavaScript 总结几个提高性能知识点(推荐)
2017/02/20 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
Python 数据处理库 pandas进阶教程
2018/04/21 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
python队列Queue的详解
2019/05/10 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
如何使用Python脚本实现文件拷贝
2019/11/20 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
在python中利用dict转json按输入顺序输出内容方式
2020/02/27 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
全球知名的珠宝首饰品牌:Kay Jewelers
2018/02/11 全球购物
营销专业应届生求职信
2013/11/26 职场文书
大学生就业推荐信范文
2013/11/29 职场文书
个人简历自我评价
2014/01/06 职场文书
财务总经理岗位职责
2014/02/16 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
杭州黄龙洞导游词
2015/02/10 职场文书
护士求职自荐信
2015/03/25 职场文书
教师节倡议书2015
2015/04/27 职场文书
夏洛特的网观后感
2015/06/15 职场文书
值班管理制度范本
2015/08/06 职场文书