实现xgplayer 西瓜播放器截图自定义功能

前言

最近在做需求的时候,碰上了需要在xgplayer 西瓜播放器中截图的情况,具体是需要实现一个按钮,点击过后实现当前页面截图。

官方自带的方法只能在播放器下方多出来一个按钮,具体下面再来讲述。

需求和实现

具体的需求是我需要在播放器外面实现一个按钮,去调用播放器的截图功能,然后获取到截取的图片。

关于xgplayer提供的截方法

xgplayer官方提供的截图方法,就是在new Player的时候添加上screenShot参数,这个参数可以设定一个值为saveImg,默认是为true的,就是在点击截图后保存图片,不想保存图片就把这个值设置为false就可以了。

获取图片的数据

xgplayer提供给我们的关于截图的方法只有一段话

image.png
然后还是要去涉及到源码层面才能看到具体的方法。 先是在issues中搜索了一下screenShot看一下之前是否有人提起过这个的使用,发现了一条issues:
在这里插入图片描述
其中就提到了刚刚上面说到的,通过设定saveImg的值就能够禁止下载,还有一个重要的点:

player.on('screenShot', screenShotImg => {})

在player上可以订阅关于截图的相关事件,并且返回一个参数,通过在浏览器实践,发现返回的参数就是我们要的图片:
在这里插入图片描述
但是现在我们还是只能通过官方提供的按钮来实现截图,接下去就是要自己定义一个方法来调用截图事件。
在这里插入图片描述

定义截图方法

通过阅读源码我们可以发现:

image.png

screenShot是一个挂载在player上的方法,传入了一个默认参数save=true,这就是定义了保存图片默认是为true的。

然后我们不难发现,player通过监听了screenShotBtnClick这个事件后就调用了截图的方法,所以我们就可以在获取到的player上来发布一个点击事件去调用这个监听事件。

 function getScreenShot() {
      player.emit("screenShotBtnClick");
 } 

接下来我们就只需要调用这个函数,就可以实现截图了。可以把这个函数绑定在一个元素上,就可以实现点击外部的元素来截图,这里我先随便定义了一个按钮来做实验:

<div class="aaa">截图</div>

 let aaa = document.querySelector(".aaa");
 aaa.addEventListener("click",getScreenShot);

在这里插入图片描述
这个按钮成功获取到了图片和数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Xgplayer 中设置 HLS 解密方式,需要使用 `hlsConfig` 对象的 `decrypt` 属性。这个属性可以是一个函数或一个字符串。 如果是一个函数,函数将会接受一个 `uri` 参数,表示要解密的 URI,然后返回一个 Promise 对象,该对象将解密后的数据作为其解析值。 如果是一个字符串,它会被用作解密密钥的 URI。在这种情况下,Xgplayer 会使用 XHR 获取该 URI 并将其作为解密密钥使用。 以下是一个使用 AES-128 加密算法的示例: ```javascript const player = new Player({ id: 'video', url: 'https://example.com/video.m3u8', hlsConfig: { decrypt(uri) { const keyUri = 'https://example.com/key.bin'; return fetch(keyUri).then(response => response.arrayBuffer()) .then(key => { const iv = new Uint8Array(16); const aes = new AES(key, { mode: 'cbc', iv }); return fetch(uri).then(response => response.arrayBuffer()) .then(data => aes.decrypt(data)); }); } } }); ``` 在这个示例中,我们使用了 `AES` 加密算法,并将其作为解密器传递给 `hlsConfig.decrypt` 方法。我们首先获取密钥 URI,然后使用 `fetch` 方法获取密钥数据并将其作为 `ArrayBuffer` 对象解析。 接下来,我们定义了一个包含 16 个零值的 `Uint8Array` 对象作为初始化向量(IV),并将其传递给 `AES` 对象的构造函数。然后,我们使用 `fetch` 方法获取要解密的 URI 数据,并将其作为 `ArrayBuffer` 对象解析。最后,我们使用 `AES.decrypt` 方法解密数据并将其返回。 请注意,这个示例代码的加密解密方式仅供参考,实际使用中需要根据具体情况进行适当修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值