android easyplayer截屏,TSINGSEE青犀视频开发EasyWasmPlayer H265播放器是如何实现视频截图功能的?...

原标题:TSINGSEE青犀视频开发EasyWasmPlayer H265播放器是如何实现视频截图功能的?

在我们做视频开发的过程中,会遇到不少需求,其中视频截图就是一个比较常见的需求,因此TSINGSEE青犀视频不管是在设计视频平台还是视频播放器的时候,我们都会在原有开发的基础上对视频截图进行一些功能拓展。

3e010d8e325cf3d1eb8eedafcddae77b.png

TSINGSEE青犀视频开发的H265播放器截图功能主要利用canvas实现,用canvas的绘画能力画出视频某一帧的视频画面,获得到图像之后转换成图像,再利用a标签实现自动保存到本地。

1、首先在播放器上选一个合适的位置放置截图图标。这边选择在播放器控制栏下加入截图按钮。

fb900cb20fc46d66f171ae0d9c282b58.png

实现:

在项目中找到SyncPlayer.js,插入截图按钮样式代码并添加点击监听事件。

97dccf09915d2dadbbcd3e4bffd09f55.png

//截图

this.snap = document.('span'); // 插入dom盒子用来展示图标

this.snap.classList = "fa fa-camera snap"; // 插入图标class类

this.snap.title = '截图';

this.timeBox.(this.snap); // 把截图盒子插入timeBox控制栏中(timeBox为控制栏盒子)

this.snap.onclick = function () {

self.savePic()

}

2.截图方法实现,当截图按钮点击调用截图的方法。

savePic() {

var fileName = common.fileDateName();

var strDataURL= '';

var timeSnap = 0;

// 找到需要截图的video标签

var video = this.playerUI.children[2];

var canvas = (window.canvas = document.("canvas"));

if (video.localName == "video") {

canvas.width = video.videoWidth;

canvas.height = video.videoHeight;

} else {

canvas.width = video.width;

canvas.height = video.height;

}

canvas.getContext("2d").drawImage(video, 0, 0, canvas.width, canvas.height);

// 获取bash64图像数据

strDataURL = canvas.toDataURL("image/png");

//判断截图是否为空,为空重新截图

if (strDataURL.indexOf('iVBORw0KGgoAAAANSUhEUgAAAtAAAAUACAYAAABuzmU9AAAgAElEQVR4Xu3WoREAAAjEMNh/aVagPuhXOUR3HAECBAgQIECAAAECb4F9Lw0JECBAgAABAgQIEBgB7QkIECBAgAABAgQIBAE') !== -1) {

timeSnap = setInterval(() => {

canvas.getContext("2d").drawImage(video, 0, 0, canvas.width, canvas.height);

strDataURL = canvas.toDataURL("image/png");

if (strDataURL.indexOf('iVBORw0KGgoAAAANSUhEUgAAAtAAAAUACAYAAABuzmU9AAAgAElEQVR4Xu3WoREAAAjEMNh/aVagPuhXOUR3HAECBAgQIECAAAECb4F9Lw0JECBAgAABAgQIEBgB7QkIECBAgAABAgQIBAE') !== -1) {

} else {

clearInterval(timeSnap)

timeSnap = 0

downloadImg()

}

}, 10);

} else {

downloadImg()

}

// 下载截图

function downloadImg() {

var arr = strDataURL.split(","),

mime = arr[0].match(/:(.*?);/)[1],

bstr = atob(arr[1]),

n = bstr.length,

u8arr = new Uint8Array(n);

while (n--) { u8arr[n] = bstr.charCodeAt(n) }

var blob = new Blob([u8arr], {type: mime});

var url = window.URL.createObjectURL(blob);

var a = document.("a");

a.style.display = "none";

var html = `

下载

复制编码

blob

`;

var imgPage = window.open("","_blank");

imgPage.document.body.style.backgroundColor = '#000'

imgPage.document.body.style.textAlign = 'center'

imgPage.document.body.innerHTML = html

document.body.(a);

setTimeout(function () {

document.body.removeChild(a);

window.URL.revokeObjectURL(url);

}, 1000);

}

}

3.点击后会跳转一个新的页面预览图像,右上角提供图像数据和屏图片下载,下载下来的图片展现如下:

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值