VAP是企鹅电竞实现融合礼物特效的组件,将图片/文字与原始mp4视频融合在一起,支持透明度,
项目详细介绍请参考 [VAP](https://github.com/Tencent/vap)
先贴个图吧,全屏确实好看,确实吊
1、安装
npm i video-animation-player
// 第一步引用
import Vap from "video-animation-player"
// 第二步创建实例
import Vap from "video-animation-player"
let dom= document.getElementById("vap-warp")
let vapPlayer = new Vap({
container: dom, // 要渲染的载体,dom元素
src: url, // vap动画地址
config: json, // 播放vap动画需要的 json文件。必填
width: window.innerWidth, // 容器宽度
height: window.innerHeight, // 容器高度
fps: 30, // 帧数,json文件中有这个视频的帧数的,可以看一下,
mute: true, // 静音
type: 2, // 组件基于type字段做了实例化缓存,不同的VAP实例应该使用不同的type值(如0、1、2等)
loop: false, // 循环
precache: true, // 预加载视频,下载完再播。小动画建议边下边播,大动画还是先下后播吧,因为太大了或者网络不好,会一卡一卡的。
beginPoint: 0, // 起始播放时间点(单位秒),在一些浏览器中可能无效
accurate: true, // 是否启用精准模式(使用requestVideoFrameCallback提升融合效果,浏览器不兼容时自动降级)
})
vapPlayer.play() // 开始播放
vapPlayer.on("ended", () => {
// 监听播放完成的事件
vapPlayer.destroy()
vapPlayer = null
animateCallback(item, dom)
})
好的以上是我的使用,但是有一点就是:json文件不能为空,vap只是一个叫法,其实本质还是一个mp4的视频。播放器要根据json文件中的配置信息进行播放。没有json只能播带黑白色调的视频了,做礼物的会有配套的json文件。vap格式的动画生成时都会有一个配套的json文件。
以下是官方文档
1、安装
npm i video-animation-player
2、创建实例
import Vap from 'video-animation-player'
# init
let vap = new Vap(options)
3、实例方法
# 实例方法
1、on(): 绑定h5 video事件或者自定义事件(frame: 接收当前帧和播放时间戳) 如on('playering', function() {// do some thing})
2、destroy():销毁实例,清除video、canvas等
3、pause():暂停播放
4、play():继续播放
5、setTime(s):设置播放时间点(单位秒)
4、实例参数
参数名 | 含义 | 默认值 |
---|---|---|
container | dom容器 | null |
src | mp4视频地址 | ‘’ |
config | 配置json对象(详情见下文) | ‘’ |
width | 宽度 | 375 |
height | 高度 | 375 |
fps | 动画帧数(生成素材时在工具中填写的fps值) | 20 |
mute | 是否对视频静音 | false |
loop | 是否循环播放 | false |
type | 组件基于type字段做了实例化缓存,不同的VAP实例应该使用不同的type值(如0、1、2等) | undefined |
beginPoint | 起始播放时间点(单位秒),在一些浏览器中可能无效 | 0 |
fontStyle | 融合字体样式用法参考 | ‘’ |
accurate | 是否启用精准模式(使用requestVideoFrameCallback提升融合效果,浏览器不兼容时自动降级) | false |
precache | 是否预加载视频资源(默认关闭,即边下边播) | false |
onDestroy | 组件销毁时回调 | undefined |
onLoadError | 加载失败回调 | undefined |
ext(无固定名) | 融合参数(和json配置文件中保持一致) | ‘’ |
注意:默认字体大小是根据文字个数动态变化的,会保证文字全部展示出来,如果通过fontStyle参数设置字体大小后,可能出现文字展示不全的现象
内容格式固定,使用VAP素材生成工具生成
使用webgl texture获取video和图片/文字的纹理,并在shader中进行自定义融合,