基本介绍

H5 Video是不提供截图的API的, 视频截图需要借助Canvas,通过Canvas提供的drawImage方法,把Video的当前画面渲染到画布上, 最终通过toDataURL方法可以导出图片的base64编码,基本就完成了图片截图的功能。

功能实现

Canvas接口介绍

drawImage接口
在画布上绘制图像、画布或视频,也能够绘制图像的某些部分,以及/或者增加或减少图像的尺寸,主要参数为:

参数 描述
img 规定要使用的图像、画布或视频。
sx 可选。开始剪切的 x 坐标位置。
sy 可选。开始剪切的 y 坐标位置。
swidth 可选。被剪切图像的宽度。
sheight 可选。被剪切图像的高度。
dx 在画布上放置图像的 x 坐标位置。
dy 在画布上放置图像的 y 坐标位置。
dwidth 可选。要使用的图像的宽度。(伸展或缩小图像)
dheight 可选。要使用的图像的高度。(伸展或缩小图像)

参考一下这个图应该就比较清楚的了:

看一个例子,比如一个视频是640X480,现在需要截取下半部分:

function(){var c=document.getElementById("myCanvas");var ctx=c.getContext("2d");var video=document.getElementByTagName("video");ctx.drawImage(video,0,240,640,240,0,0,640,240);
};

toDataURL接口

方法返回一个包含图片展示的 data URI 。可以使用 type 参数其类型,默认为 PNG 格式。图片的分辨率为96dpi

参数 描述
type 可选。图片格式,默认为 image/png
encoderOptions 可选。在指定图片格式为 image/jpeg 或 image/webp的情况下,可以从 0 到 1 的区间内选择图片的质量。如果超出取值范围,将会使用默认值 0.92。其他参数会被忽略

比如设置导出图片的质量:

var fullQuality = canvas.toDataURL("image/jpeg", 1.0);
var mediumQuality = canvas.toDataURL("image/jpeg", 0.5);
var lowQuality = canvas.toDataURL("image/jpeg", 0.1);

导出图片时需注意的:

  • 如果画布的高度或宽度是0,那么会返回字符串“data:,”。
  • 如果传入的类型非“image/png”,但是返回的值以“data:image/png”开头,那么该传入的类型是不支持的。
  • Chrome支持“image/webp”类型。
  • 图片地址或者视频地址需要支持跨越访问,并且在 img或video Dom元素上添加属性crossOrigin:"anonymous"
<video crossOrigin:"anonymous"></video>
<img crossOrigin:"anonymous"></img>

Aliplayer的截图功能

Alilayer里实现的截图除了截图一张图片,还可以添加水印,还可以截取镜像的视频,效果如下:

截图功能介绍

创建Canvas,设置大小为实际视频的大小,根据视频的镜像方向,对Canvas做相应的处理,代码如下:

var canvas = document.createElement('canvas'), video = that._player.tag,
canvas.width =video.videoWidth,//视频原有尺寸
canvas.height = video.videoHeight;//视频原有尺寸
var ctx = canvas.getContext('2d');
ctx.save();
//判断用户是否对视频做过镜像
var image = that._player.getImage();
if(image == "vertical")//垂直镜像
{ctx.translate(0,canvas.height);ctx.scale(1, -1);
}
else if(image == "horizon")//水平镜像
{ctx.translate(canvas.width, 0);ctx.scale(-1, 1);
}
//视频的当前画面渲染到画布上
ctx.drawImage(video, 0, 0, w, h);
ctx.restore();

水印功能介绍

Aliplayer水印支持添加的位置、字体、画笔颜色和填充样式,在创建播放器的时候指定,代码如下:

let drawText =>(ctx, options)
{var watermark = options.snapshotWatermark;if(watermark && watermark.text){//设置字体样式ctx.font = watermark.font;//设置字体填充颜色if(watermark.fillColor){ctx.fillStyle = watermark.fillColor;ctx.fillText(watermark.text, watermark.left, watermark.top);}//设置画笔颜色if(watermark.strokeColor){ctx.strokeStyle = watermark.strokeColor;ctx.strokeText(watermark.text, watermark.left, watermark.top);}//画布上画出水印ctx.stroke();}
}

阿里云Aliplayer高级功能介绍(一):视频截图 1相关推荐

  1. 阿里云Aliplayer高级功能介绍(一):视频截图

    基本介绍 H5 Video是不提供截图的API的, 视频截图需要借助Canvas,通过Canvas提供的drawImage方法,把Video的当前画面渲染到画布上, 最终通过toDataURL方法可以 ...

  2. 阿里云 Aliplayer高级功能介绍(二):缩略图

    为什么80%的码农都做不了架构师?>>>    基本介绍 Aliplayer提供了缩略图的功能,让用户在拖动进度条之前知道视频的内容,用户能够得到很好的播放体验,缩略图是显示在Con ...

  3. 阿里云 Aliplayer高级功能介绍(三):多字幕

    基本介绍 国际化场景下面,播放器支持多字幕,可以有效解决视频的传播障碍难题,该功能适用于视频内容在全球范围内推广,阿里云的媒体处理服务提供接口可以生成多字幕,现在先看一下具体的效果: WebVTT格式 ...

  4. 阿里云 Aliplayer高级功能介绍(四):直播时移

    基本介绍 时移直播基于常规的HLS视频直播,直播推流被切分成TS分片,通过HLS协议向播放用户分发,用户请求的m3u8播放文件中包含不断刷新的TS分片地址:对于常规的HLS直播而言,TS分片地址及相应 ...

  5. 阿里云 Aliplayer高级功能介绍(二):缩略图 1

    基本介绍 Aliplayer提供了缩略图的功能,让用户在拖动进度条之前知道视频的内容,用户能够得到很好的播放体验,缩略图是显示在Controlbar的上面,并且包含当前的时间,阿里云的媒体处理服务提供 ...

  6. 阿里云 Aliplayer高级功能介绍(七):多分辨率

    基本介绍 网络环境比较复杂.网速不稳定,Aliplayer提供了多分辨率播放的模式,用户可以手工切换分辨率和播放器选择最优分辨率,基本UI如下: 66ccc596257a5db1d0f106b5745 ...

  7. 阿里云 Aliplayer高级功能介绍(九):自动播放体验

    基本介绍 经常会碰到客户询问,为什么我设置了autoplay为true,但是没有自动播放,每次都要向客户解释这个是浏览器从用户体验角度考虑做的限制,客户会继续询问那我要怎么做? 针对这个问题Alipl ...

  8. 阿里云 Aliplayer高级功能介绍(五):多语言

    基本介绍 Aliplayer默认支持中文和英文,并且依赖于浏览器的语言设置自动启用中文或英文资源, 除了支持这两种资源外,还提供自定义语言的形式,支持其他国际语言,另外Aliplayer还支持点播服务 ...

  9. 阿里云 Aliplayer高级功能介绍(九):自动播放体验 1

    基本介绍 经常会碰到客户询问,为什么我设置了autoplay为true,但是没有自动播放,每次都要向客户解释这个是浏览器从用户体验角度考虑做的限制,客户会继续询问那我要怎么做? 针对这个问题Alipl ...

最新文章

  1. linux升级OpenSSL
  2. radio切换控制div显示_React 项目实践——搭建一个温度控制 App
  3. Tyvj P1424 占卜DIY
  4. mina 之IoService(翻译)
  5. 有了人工智能还不够?腾讯的工具产品想试试社交
  6. JZOJ 5628. 【NOI2018模拟4.4】Travel
  7. EF 执行存储过程方法
  8. Java常用接口与类——main方法/Object类/Scanner类
  9. 1112个人赛,最长回文串常见算法讨论
  10. C++_数据类型_算术运算符_取模运算_递增递减运算_赋值运算符_比较运算符---C++语言工作笔记014
  11. 【报告分享】2021年中国人工智能产业研究报告:数字经济时代的产业升级探索.pdf(附下载链接)...
  12. 封条格式用word怎么打_汽车密封条保养膏怎么用?大师来教你正确方法
  13. Windows与Linux下查看占用端口的进程
  14. Spring源码系列 — BeanDefinition
  15. 好用的linux连接工具
  16. [偏相关分析]偏相关系数计算及假设检验
  17. SATA OOB CTS测试项解析
  18. 开源项目推荐 | 面向智慧城市的计算机视觉算法基准测试 Benchmark for Smart City上线
  19. 明略科技吴明辉:每一次新数据都会带来商业模式的迭代 | 会员专栏
  20. imx533 配置 制作SD卡启动文件系统

热门文章

  1. conda env create -f environment.yml报错ResolvePackageNotFound和Found conflicts的解决方案【已解决】
  2. 【老生谈算法】matlab实现车牌识别中值滤波算法——车牌识别中值滤波算法
  3. RK3399平台开发系列讲解(PCI/PCI-E)5.54、PCIE INTx中断机制
  4. 记nexus2升级nexus3数据迁移
  5. uni-app+websocket实现语音聊天小程序
  6. 一条sql查询出多个统计结果
  7. qs.js库 使用方法
  8. 开源小程序商城推荐-支持所有小程序平台
  9. deepin/UOS Navicat15
  10. 五年Java程序员进阶架构师的一些心得以及职业生涯规划