Nodejs中使用puppeteer控制浏览器中视频播放功能


Posted in NodeJs onAugust 26, 2019

本项目主要功能为在浏览器中自动播放视频,并且实现音量控制,快进快退,全屏控制,播放暂停控制等功能。

仓库地址:  github.com/hapiman/chr…

安装静态服务器

如果电脑上存在nodejs的环境,可以直接安装 anywhere 来访问 index.html 页面。 进入项目根目录,执行命令: anywhere ,然后浏览器会自动打开 http://localhost:8000 页面。

使用puppeteer自动化执行命令

通过在 nodejs 调用前端页面的方法,然后能够Socket实现远程控制浏览器的视频播放。

具体功能实现

var _volumeNum = 1 // 音量值
 var _speedNum = 1 // 速度值
 var videoSrc = 'demo02.mp4' // 切换资源
 window.onload = function () {
  var myVideo = document.getElementById('myVideo')
  var scSource = document.getElementById('sc')
  var myVideoBody = { pause: true }
  // 播放完成指令
  myVideo.addEventListener('ended', function () {
   scSource.src = videoSrc;
   myVideo.load()
   myVideo.play()
  })
  // 初始化
  start()
 }
 // 获取video
 function getVideo() {
  var myVideo = document.getElementById('myVideo')
  return myVideo
 }
 // 快进
 function vforward(params) {
  if (_speedNum >= 2) return
  _speedNum = accAdd(_speedNum, 0.1)
  console.log('vforward _speedNum: ', _speedNum)
  getVideo().playbackRate = _speedNum
 }
 // 快退
 function vbackward() {
  if (_speedNum <= 0.5) return
  var myVideo = getVideo()
  _speedNum = accSub(_speedNum, 0.1)
  console.log('vbackward _speedNum: ', _speedNum)
  getVideo().playbackRate = _speedNum
 }
 // 页面加载之后执行命令
 function start() {
  var myVideo = getVideo()
  myVideo.volume = 1
  myVideo.playbackRate = 1
 }
 // 设置静音
 function setMuted() {
  getVideo().muted = true
 }
 // 设置非静音
 function setNotMuted() {
  getVideo().muted = false
 }
 // 播放
 function vplay() {
  console.log('vplay =>')
  getVideo().play();
 }
 // 暂停
 function vstop() {
  getVideo().pause();
 }
 // 重播
 function vrestart() {
  getVideo().currentTime = 0
  getVideo().play()
 }
 // 取消全屏
 function cancelFull() {
  screenfull.exit()
 }
 // 打开全屏
 function openFull() {
  getVideo().webkitRequestFullscreen()
 }
 // 音量 --
 function reduceVolume() {
  console.log('reduceVolume:: current volume: ', myVideo.volume) // 当前音量
  getVideo().muted = false
  if (_volumeNum <= 0) return
  _volumeNum = accSub(_volumeNum, 0.1)
  getVideo().volume = _volumeNum
 }
 // 音量 ++
 function addVolume() {
  console.log('addVolume:: current volume: ', myVideo.volume)  // 当前音量
  getVideo().muted = false
  if (_volumeNum >= 1) return
  _volumeNum = accAdd(_volumeNum, 0.1)
  getVideo().volume = _volumeNum
 }

遇到的问题

关于人工触发

打开网页的时候,autoplay可以自动播放,但是是静音模式,从76版本开始,chrome浏览器安全机制不再允许有声自动播放视频。

同样的,处于安全考虑,浏览器也不能够在没有用户操作的情况,通过接口设置为全屏。

当前项目引入 puppeteer 目的就是为了模拟人工触发页面的情况。

总结

以上所述是小编给大家介绍的Nodejs中使用puppeteer控制浏览器中视频播放功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

NodeJs 相关文章推荐
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
Jul 15 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
NodeJS遍历文件生产文件列表功能示例
Jan 22 NodeJs
async/await与promise(nodejs中的异步操作问题)
Mar 03 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
nodejs学习笔记之路由
Mar 27 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
关于Mac下安装nodejs、npm和cnpm的教程
Apr 11 NodeJs
nodejs中用npm初始化来创建package.json的实例讲解
Oct 10 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodeJs的安装与npm全局环境变量的配置详解
Jan 06 NodeJs
nodejs简单抓包工具使用详解
Aug 23 #NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 #NodeJs
Nodejs libuv运行原理详解
Aug 21 #NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 #NodeJs
Nodejs 识别图片类型的方法
Aug 15 #NodeJs
NodeJs实现简易WEB上传下载服务器
Aug 10 #NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 #NodeJs
You might like
php开发环境配置记录
2011/01/14 PHP
phpmailer中文乱码问题的解决方法
2014/04/22 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
浅谈PHP中如何实现Hook机制
2017/11/14 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
JavaScript 事件的一些重要说明
2009/10/25 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
javascript无刷新评论实现方法
2015/05/13 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
常用的JQuery函数及功能小结
2016/03/24 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
Javascript中作用域的详细介绍
2016/10/06 Javascript
jQuery实现立体式数字滚动条增加效果
2016/12/21 Javascript
Javascript实现找不同色块的游戏
2017/07/17 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
微信小程序canvas动态时钟
2020/10/22 Javascript
Vue仿Bibibili首页的问题
2021/01/21 Vue.js
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python实现简单的socket server实例
2015/04/29 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
python学生管理系统开发
2019/01/30 Python
解决Jupyter因卸载重装导致的问题修复
2020/04/10 Python
python 制作python包,封装成可用模块教程
2020/07/13 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
秋季运动会广播稿大全
2014/02/17 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
庆祝国庆节标语
2014/10/09 职场文书
银行业务授权委托书
2014/10/10 职场文书
学习焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
八年级作文之一起的走过日子
2019/09/17 职场文书
【海涛dota解说】海涛小满开黑4v5被破两路翻盘潮汐第一视角解说
2022/04/01 DOTA
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android