需求

视频相关项目,有时候需要对视频进行截图的,图片一般加上水印。

这里展示下普通视频播放和直播视频播放的加水印方式。

资源

测试需要的视频资源用的 阿里视频中心

video播放视频

一些非直播、不复杂的视频播放需求,直接用这个就好了,特别是一些演示用的项目。

目前,<video> 元素支持三种视频格式:MP4WebMOgg

  • MP4:MPEG 4文件使用 H264 视频编解码器和AAC音频编解码器

  • WebM:WebM 文件使用 VP8 视频编解码器和 Vorbis 音频编解码器

  • Ogg :Ogg 文件使用 Theora 视频编解码器和 Vorbis音频编解码器

主要实现代码

具体可见 代码

<video id="video1" controls crossOrigin="Anonymous" class="image" width="520" height="320" style="object-fit: fill;"><source :src="url" type="video/mp4">您的浏览器不支持 video 标签。
</video>
captureClick() {const v = document.querySelector('#video1')// v.setAttribute('crossOrigin', 'anonymous')// v.crossOrigin = 'anonymous'const width = v.videoWidthconst height = v.videoHeightconst canvas = window.canvas = document.createElement('canvas')canvas.width = widthcanvas.height = heightconst ctx = canvas.getContext('2d')ctx.drawImage(v, 0, 0, width, height)ctx.rotate(-16 * Math.PI / 180)ctx.font = '100px 宋体'ctx.fillStyle = 'rgba(255, 255, 255, 1)'ctx.fillText('测试水印', 100, height - 200)const image = canvas.toDataURL('image/png')this.captureImg1 = image
}

效果如下:

Aliplayer播放视频

支持 MP4FLVM3U8MP3 格式的视频,支持H.264编码的视频。
Flash模式下支持 RTMP,但是Flash已经不更新了,就忽略了。详情参考文档

集成进项目可以用 vue-aliplayer-v2,也可以直接参考 文档。

Aliplayer功能展示,这里有代码看,不详细介绍了。

这个播放器本身就自带加水印截图的功能,按文档配置就好了。缺点也很明显,只可以文字,不好定制。需求不复杂的可以用这个。想自定义复杂水印的,可以参考下节 EasyPlayer.js播放视频相关来实现,原理都是一样的。

snapshotWatermark:{left:"100",top:"100",text:"测试水印",font:"italic bold 48px 宋体",strokeColor:"red",fillColor:'green'
}

EasyPlayer.js播放视频

Easyplayer 支持的视频格式就比较全面了,是目前找到的唯一个支持播放 H.265 格式视频的H5播放器 EasyPlayer.js,支持直播

网上使用这个播放器,大多数是用的旧版的方式,这里用的是最新版的方式。

注意:

  • 1、目前这个播放器的最新版本,高度没有自动充满父容器,所以通过scss强行设定下,例如,这里设定320px的高度(对应的选择器,用谷歌浏览器的开发者工具,看Elements就可以找到)
::v-deep .video-wrapper {padding-bottom: 0px !important;height: 320px !important;
}
  • 2、视频播放的截图,video都需要配置下跨域。所有第三方的H5视频播放器,找到对应的video对象设置下便可,原理都一样的。例如,Easyplayer.js的跨域设置如下:
this.player2 = this.$refs['video2'].player.el_.children[0]
this.player2.setAttribute('crossOrigin', 'Anonymous')

此设置一定要在截图前设置好,不然不生效的。

主要实现代码

具体可见 代码

<EasyPlayerref="video2"class="video-view":video-url="url":stretch="true"liveautoplayfluent />
captureClick2() {const width = this.player2.videoWidthconst height = this.player2.videoHeightconst canvas = window.canvas = document.createElement('canvas')canvas.width = widthcanvas.height = heightconst ctx = canvas.getContext('2d')ctx.drawImage(this.player2, 0, 0, width, height)ctx.rotate(-16 * Math.PI / 180)ctx.font = '100px 宋体'ctx.fillStyle = 'rgba(255, 255, 255, 1)'ctx.fillText('测试水印', 100, height - 200)const image = canvas.toDataURL('image/png')this.captureImg2 = image
}

效果如下:

代码总览

涉及的文件如下(具体参考代码):

|-- src|-- views|-- videoCaptureTest    // 实例所在|-- index.vue|-- index.scss|-- index.js

代码

代码总览的目录去代码里找着看就行了。

总结

以上,只是简单的展示了文字水印,想实现复杂的,参考canvas方法就行了,文字旋转、图片等都是可以的。

Vue视频播放进行+水印的截图相关推荐

  1. 比心app源码,vue 视频播放

    比心app源码,vue 视频播放实现的相关代码 安装 npm i vue-video-player -S 引入 import { videoPlayer } from 'vue-video-playe ...

  2. vue 视频播放(使用vue-video-player)

    vue 视频播放(使用vue-video-player) 安装 npm i vue-video-player -S 引入 import { videoPlayer } from 'vue-video- ...

  3. vue 视频播放插件VideoPlayer

    vue 视频播放插件VideoPlayer 1.npm install vue-video-player --save 2.main.js引入 import VideoPlayer from 'vue ...

  4. video标签设计vue视频播放器组件

    文章目录 1.video播放器组件设计 2.在弹窗中运用视频组件 3.小结 1.video播放器组件设计 啥也别说了,上代码: <template> <div><meta ...

  5. Vue视频播放组件(Video)

    可自定义设置以下属性: 视频文件url(videoUrl),必传 视频封面url(videoCover),默认为null 视频播放器宽度(width),默认为800px 视频播放器高度(height) ...

  6. vue视频播放组件vue-mini-player

    vue-mini-player 官方文档:vue-mini-player: 基于Vue的一个轻量级HTML5视频播放组件,适配PC和移动端

  7. vue 项目实现水印效果

    如图所示 话不多说,直接上代码 基于vue的架构中,在网页中添加水印效果,具体实现代码如下: 创建 warterMark.js 用于放生成水印的操作, 建议在utils 文件下 // warterMa ...

  8. 前端Vue页面加水印方法(带源码)

    目录 方案一 tool.js index.vue 效果 方案二 watermark.js index.vue 效果 最后 方案一 可能会报错,解决办法,下面网址 地址 tool.js 创建utils ...

  9. vue 视频播放插件vue-video-player自定义样式、自动播放设置、设置一开始全屏播放视频

    1.背景 项目中有涉及视频播放的需求,并且UI设计了样式,与原生的视频video组件有差异,所以使用了vue-video-player插件,并对vue-video-player进行样式改造,自定义播放 ...

最新文章

  1. 大年初七,发paper、学Python...分享一下你的学习计划吧~
  2. Jquery各版本下载
  3. 大话云计算——认识云——“瑞友杯”虚拟化征文
  4. spark写mysql优化简书_spark——通过jdbc连接数据库中遇到的问题
  5. linux暗转旧版java_Java旧版不断发展
  6. placeholder的使用
  7. data的值 如何初始化vue_Vue原理解析(九):搞懂computed和watch原理,减少使用场景思考时间...
  8. 微型计算机生产制约因素,精品解析:广东省东莞市2019-2020学年高三下学期第一次统考(5月)模拟考试文科综合地理试题...
  9. 基于java洗浴中心管理系统_Java小白也能听懂的线程池的内部原理:老王的洗浴中心...
  10. printf 输出字符串 需要加上 c_str()
  11. 你愿意一辈子当一个打工的吗
  12. anaconda怎么打开python3.7,使用anaconda更新到python 3.7
  13. Win10/Win7下添加Protel 99 SE库文件
  14. ios yylabel 加载html,iOS关于YYLabel的富文本点击事件
  15. Ubuntu cd 命令
  16. CSS中的em运用详解,1em等于多少像素?
  17. 争议带货达人董明珠:直播带货476亿 却被质疑经销商刷单
  18. 杂项:MIME(多用途互联网邮件扩展类型)百科
  19. java echarts 生成图片_java如何在后台生成echarts图表?实际代码展示
  20. 漫画行业有妖气:曾经的一哥,今日的难兄

热门文章

  1. html响应式弹性布局,CSS3响应式布局之弹性盒子
  2. python飞行棋项目
  3. 奇虎360:5年前赴美上市到今私有化退市,未来路在何方?
  4. 【CST】-01软件安装及熟悉
  5. 博图PLC程序 停车场控制系统
  6. 【沐风老师】3DMAX摆满我的书架(FillMyBookshelves)插件使用教程
  7. UE4 自定义按键事件(踩坑记录)
  8. 浅析瞬态抑制二极管双向tvs管
  9. 【山科OJ】Problem A: 社交网络的好友推荐
  10. 怎么修改网页边框html,DIV+CSS网页布局之边框的设置方法