首页 web前端 js教程 JS预加载视频音频/视频获取截图技巧分享

JS预加载视频音频/视频获取截图技巧分享

Jan 26, 2018 pm 01:15 PM
javascript 截图

本文主要介绍了JS实现预加载视频音频/视频获取截图(返回canvas截图)的相关资料,需要的朋友可以参考下,希望能帮助到大家。

 #load-media.js


/**
 * Create by Capricorncd 2017
 */
// 同域资源实现视频截图,可上传的图片数据格式
// 非同域资源实现canvas截图预览
// 提示码
const CODES = {
 0: 'success',
 1: 'The url is not valid',
 2: 'onerror'
}
/**
 * constructor
 * @param opts.url 音频|视频URL
 * @param opts.type 'audio|video'
 * @param opts.callback 回调函数
 */
function loadMedia(opts) {
 this.callback = opts.callback || function (res) {
  console.log(res);
 }
 // 初始化
 this.init(opts);
}
// prototype
loadMedia.prototype = {
 /**
  * 初始化media
  * @param url
  */
 init: function (opts) {
  let self = this;
  if (!opts.url || typeof opts.url !== 'string') {
   this.callback({code: 1, msg: CODES[1]});
   return;
  }
  // 创建media
  let mediaType = opts.type === 'audio' ? 'audio' : 'video';
  this.media = document.createElement(mediaType);
  console.log('this.media', this.media);
  // loaded
  this.listener('canplaythrough', function (e) {
   // 截图
   if (mediaType === 'video') {
    self.screenshot();
   } else {
    self.callback({
     code: 0,
     msg: CODES[0],
     thumb: null,
     media: this.media,
     canvas: null
    });
   }
  });
  // error
  this.listener('error', function (e) {
   self.callback({code: 2, msg: CODES[2], data: e});
  })
  this.media.setAttribute('src', opts.url);
 },
 screenshot: function () {
  // create canvas
  let canvas = document.createElement('canvas');
    canvas.width = this.media.videoWidth;
    canvas.height = this.media.videoHeight;
  let ctx = canvas.getContext('2d');
  // 截取
  ctx.drawImage(this.media, 0, 0);
  let thumb = null;
  // 非跨域资源
  // !!非同域资源无法获取数据
  try {
   let type = 'image/png';
   let data = canvas.toDataURL(type);
   thumb = this.toBlobData(data, type);
  } catch (e) {}
  this.callback({
   code: 0,
   msg: CODES[0],
   thumb: thumb,
   media: this.media,
   canvas: canvas
  })
 },
 // 数据转换
 toBlobData: function (data, type) {
  // 获取base64数据
  // base64数据格式:
  // "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAkGB+wgHBgkIBwgKCgkLDRYPDQw//9k="
  data = window.atob(data.split(',')[1]);
  let ia = new Uint8Array(data.length);
  for (let i = 0; i < data.length; i++) {
   ia[i] = data.charCodeAt(i);
  };
  // canvas.toDataURL 返回的默认格式是 image/png
  return new Blob([ia], {type: type});
 },
 /**
  * addEventListener 事件监听
  * @param en EventName
  * @param callback
  */
 listener: function (en, callback) {
  this.media.addEventListener(en, function (e) {
   if (callback) {
    callback(e);
   } else {
    console.warn(this);
   }
  }, false);
 }
 /**
  * 资源是否跨域
  * @param url 资源地址
  * @returns {boolean}
  */
 // isCrossDomain: function (url) {
 //  let loc, host, protocol;
 //  loc = window.location;
 //  host = loc.host;
 //  protocol = loc.protocol;
 //  // 是否为http链接
 //  if (/(http|https):\/\//.test(url)) {
 //   if (url.indexOf(protocol + &#39;//&#39; + host) >= 0) {
 //    return false;
 //   } else {
 //    return true;
 //   }
 //  }
 //  // &#39;./xxx.mp4&#39; &#39;/xxx.mp4&#39; &#39;xxx.mp4&#39;
 //  return false;
 // }
}
登录后复制

export default loadMedia;


// 参考资料
// HTML5的Video标签的属性,方法和事件汇总
// http://www.cnblogs.com/TF12138/p/4448108.html
# 使用
import loadMedia from &#39;@/common/js/load-media&#39;
let loadVideo = new loadMedia({
 type: &#39;video&#39;,
 url: &#39;http://xmqvip1-1253933147.file.myqcloud.com/chat/video/60/2017/09/29/qgj1c8K7oaYn-SCVideo-Merged.mp4&#39;,
 callback: handleCallback
})
function handleCallback (res) {
    console.log(res)
    // canplaythrough
    if (res.code === 0) {
    }
    // error
    if (res.code === 2) {
    }
   }
登录后复制

相关推荐:

javascript - 如何使用phantomjs获取截图并保存

以上是JS预加载视频音频/视频获取截图技巧分享的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

win10电脑截图时出现黑屏怎么办_win10电脑截图时出现黑屏的处理方法 win10电脑截图时出现黑屏怎么办_win10电脑截图时出现黑屏的处理方法 Mar 27, 2024 pm 01:01 PM

1、按下win键+r键,输入regedit,点击确定。2、在打开的注册表编辑器窗口,依次展开:HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlGraphicsDriversDCI,选中右边的Timeout双击。3、然后把【数值数据】中的7改为0,确定退出即可。

红米13c怎么截图? 红米13c怎么截图? Mar 04, 2024 pm 09:13 PM

最近很多消费者都考虑更换手机,Redmi13C是一款性价比很高的选择。这款手机性能配置很出色,为了方便日常使用,下面我来简要介绍一下如何在红米13C上进行截屏操作,让我们一起来了解一下吧!红米13c怎么截图1.快捷键截屏:同时按下红米手机的电源键和音量减键,即可实现截屏操作。2.手势截屏:进入红米手机的设置,找到“更多设置”,在其中找到并点击“手势及按键快捷方式”,然后开启“三指下拉”操作,设置成截屏。这样在需要截屏的时候,只需要用三个手指在屏幕上向下滑动,即可实现截屏。3.通知栏截屏:从手机屏

iPhone屏幕截图不起作用:如何修复 iPhone屏幕截图不起作用:如何修复 May 03, 2024 pm 09:16 PM

屏幕截图功能在您的iPhone上不起作用吗?截屏非常简单,因为您只需同时按住“提高音量”按钮和“电源”按钮即可抓取手机屏幕。但是,还有其他方法可以在设备上捕获帧。修复1–使用辅助触摸使用辅助触摸功能截取屏幕截图。步骤1–转到您的手机设置。步骤2–接下来,点击以打开“辅助功能”设置。步骤3–打开“触摸”设置。步骤4–接下来,打开“辅助触摸”设置。步骤5–打开手机上的“辅助触摸”。步骤6–打开“自定义顶级菜单”以访问它。步骤7–现在,您只需将这些功能中的任何一个链接到屏幕捕获即可。因此,点击那里的首

如何在联想ThinkPad X13笔记本上进行屏幕截图:快捷键指南 如何在联想ThinkPad X13笔记本上进行屏幕截图:快捷键指南 Jan 01, 2024 pm 09:11 PM

截图是电脑上一项非常常用的功能,它可以方便地捕捉并分享屏幕上的内容。在电脑上,有许多方法可以进行截图。现在,我们来介绍一下联想ThinkPadX13笔记本常用的截图方法。联想ThinkPadX13屏幕截图方法介绍关于电脑上的截图方法,有多种选择可供使用。在这里,我们将重点介绍ThinkPadX13的快捷键截图和主流软件截图的方法。ThinkPadX13提供了简便的快捷键截图功能。您只需按下Fn键和PrtSc键,即可将当前屏幕的内容截图保存到剪贴板中。之后,您可以打开任何图片编辑软件,如Paint

mac截图怎么发送微信 mac截图怎么发送微信 Feb 06, 2024 am 09:55 AM

mac截图该怎么发送微信,首先在桌面找到launchpad打开进去后找到微信,然后点击微信进行登录最后再弹出来的偏好设置中进入快捷键设置窗口就可以了。mac截图怎么发送微信1、在桌面找到launchpad。2、然后找到微信。3、点击登录微信。4、登录上去后在电脑页面的左上角找到微信选项并打开。5、然后在弹出来的菜单中偏好设置选项进入快捷设置窗口,最后在快捷键设置页面中找到截图功能并设置好按键就可以了。

Win8如何利用快捷键进行截图? Win8如何利用快捷键进行截图? Mar 28, 2024 am 08:33 AM

Win8如何利用快捷键进行截图?在日常使用电脑的过程中,我们经常需要对屏幕上的内容进行截图。对于Windows8系统的用户来说,通过快捷键进行截图是一个方便且高效的操作方式。在这篇文章中,我们将介绍Windows8系统中几种常用的快捷键进行截图的方法,帮助大家更快速地进行屏幕截图操作。第一种方法是使用“Win键+PrintScreen键”组合键来进行全

一键截图教程:荣耀Magic5Pro的截屏方法 一键截图教程:荣耀Magic5Pro的截屏方法 Dec 28, 2023 pm 10:09 PM

荣耀Magic5Pro配备了MagicOS7.1操作系统,操作非常流畅。那么,如何在Magic5Pro上进行截屏呢?本文将为大家提供详细的一键截图教程荣耀Magic5Pro截屏教程荣耀Magic5Pro支持标准截屏、局部截屏和长截屏。下面是具体的截屏方法:在手机屏幕的顶部边缘向下滑动,就可以打开控制中心。在控制中心中找到截屏图标,点击它就可以快速进行截屏。另外,也可以同时按下【音量-】和【开机键】来进行截屏操作如果您需要进行局部截屏或长截图,您需要点击截屏图标右下角的倒三角。一旦点击,会显示【局

《星刃》全新三主角海报曝光 紧身胶衣尽显女主身材 《星刃》全新三主角海报曝光 紧身胶衣尽显女主身材 Feb 09, 2024 pm 03:12 PM

近日动作冒险游戏《星刃》(剑星)发布了全新主视图公布,女主角伊芙(Eve)、莉莉(Lily)和亚当(Adam)登场亮相。《星刃》故事始于战士伊芙从异星殖居地降临的一刻,她受命来到地球,击败突然出现的人类宿敌奈提巴。奈提巴似乎会听令于由阿尔法和长老组成的高等同类,攻击人类。在满目疮痍的世界,主角伊芙遇见了留在地球的幸存者亚当,以及前腾空小队成员莉莉。他们并肩作战对抗奈提巴。本作将于4月26日发售,登陆PS5。有望在晚些时候登陆PC。

See all articles