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 相关文章推荐
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
nodejs 实现模拟form表单上传文件
Jul 14 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
win系统下nodejs环境安装配置
May 04 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
NodeJs实现定时任务的示例代码
Dec 05 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 NodeJs
nodejs中使用archive压缩文件的实现代码
Nov 26 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 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提取身份证号码中的生日日期以及验证是否为成年人的函数
2015/09/29 PHP
PHP设计模式之观察者模式实例
2016/02/22 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
JQUERY复选框CHECKBOX全选,取消全选
2008/08/30 Javascript
JSON传递bool类型数据的处理方式介绍
2013/09/18 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
2016/12/15 Javascript
Node.js学习入门
2017/01/03 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
vue-cli脚手架的.babelrc文件用法说明
2020/09/11 Javascript
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
vue中如何添加百度统计代码
2020/12/19 Vue.js
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
[08:06]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant 选手采访
2021/03/11 DOTA
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python调用微信公众平台接口操作示例
2017/07/08 Python
Python中执行存储过程及获取存储过程返回值的方法
2017/10/07 Python
python对离散变量的one-hot编码方法
2018/07/11 Python
详解Python字典的操作
2019/03/04 Python
Python TKinter如何自动关闭主窗口
2020/02/26 Python
如何在Python对Excel进行读取
2020/06/04 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
css3学习心得分享
2013/08/19 HTML / CSS
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
群众路线四风对照检查材料
2014/11/04 职场文书
优秀教师事迹材料
2014/12/15 职场文书
2015年基层党组织公开承诺书
2015/01/21 职场文书
党支部半年考察意见
2015/06/01 职场文书
游戏开发中如何使用CocosCreator进行音效处理
2021/04/14 Javascript
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python