高性能动画组件VAP开源啦!

VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案。

  • 相比Webp,Apng动图方案,具有高压缩率(素材更小)、硬件解码(解码更快)的优点

  • 相比Lottie,能实现更复杂的动画效果(比如粒子特效)

 

特效展示

VAP还能在动画中融入自定义的属性(比如用户名称, 头像)

支持平台

Android, iOS, web

性能简述

VAP在文件大小与解码性能上有很大的优势,实验参数请参考github:https://github.com/Tencent/vap/Introduction.md


原理说明

 

mp4视频方案无论从效果、大小与解码性能上都是最优的,但H264的里存的是YUV数据,并没有带透明通道。VAP方案基于mp4,解决视频里透明度的问题,这样就能兼具更好的压缩效率,与更好的解码性能。


1. 视频透明度实现

H264解码出来每一帧的数据是YUV,转换为RGB后是不带Alpha通道的,而我们可以在视频中额外开辟一块区域,在RGB通道里存储Alpha的值,最后利用OpenGL将这些数据合成为ARGB图像(带透明通道的图像)。

  

2. 动画配置信息

动画播放过程中,需要一些配置信息协助播放(比如Alpha区域声明,包括融合动画信息),配置是JSON格式。为了组件更方便使用,所有相关文件都合并到mp4文件里,这样播放动画只需要一个mp4文件即可。

 

3. 融合动画

VAP还支持在动画中融入自定义属性,比如用户名称, 头像。我们称其为VAP融合动画。视频内容无法直接实现属性的插入,只能曲线救国,通过对图片进行修剪,欺骗用户的眼睛,让其看起来像是在视频内容里,实现最终的融合效果(效果如文章开头展示)。

https://github.com/Tencent/vap

(点击文末阅读原文直接访问)

请给项目 一个 Star !

欢迎提出你的 issue 和 PR!

 国内镜像地址:

https://git.code.tencent.com/Tencent_Open_Source/vap

(登录后才能访问公开项目)

腾讯工蜂源码系统为开源开发者提供完整、最新的腾讯开源项目国内镜像

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
io.github.tencent:vap 是一个基于 Java 的验证框架,它并不与动画播放有任何关系。因此,不能使用 io.github.tencent:vap 来实现动画播放。 如果您想要实现动画播放,可以考虑使用 Android 中的动画 API,例如属性动画、帧动画、转场动画等。这些 API 提供了丰富的动画效果和控制方式,可以满足不同场景下的需求。 例如,在使用属性动画时,可以使用 ObjectAnimator 类来实现属性变化的动画效果。例如,可以将一个 View 对象的 alpha 属性从 0 变化到 1,实现一个淡入效果: ``` ObjectAnimator animator = ObjectAnimator.ofFloat(view, "alpha", 0f, 1f); animator.setDuration(1000); animator.start(); ``` 在使用帧动画时,可以将一组连续的图片资源合成一张大图,并通过 XML 文件来指定播放顺序和播放速度。例如,可以创建一个名为 anim_fade.xml 的文件来实现一个淡入淡出的帧动画: ``` <animation-list xmlns:android="http://schemas.android.com/apk/res/android" android:oneshot="false"> <item android:drawable="@drawable/fade_in" android:duration="1000"/> <item android:drawable="@drawable/fade_out" android:duration="1000"/> </animation-list> ``` 然后在 Java 代码中使用 AnimationDrawable 类来加载和播放该动画: ``` ImageView imageView = findViewById(R.id.image_view); AnimationDrawable animationDrawable = (AnimationDrawable) getResources().getDrawable(R.drawable.anim_fade); imageView.setImageDrawable(animationDrawable); animationDrawable.start(); ``` 总的来说,Android 中提供了多种动画 API,可以方便地实现各种动画效果。您可以根据具体需求选择合适的 API 来实现动画播放。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值