VAP

高性能动画组件
授权协议 MIT
开发语言 Kotlin Java Objective-C Ruby JavaScript
所属分类 iOS代码库、 动画(Animation)
软件类型 开源软件
地区 国产
投 递 者 宋成天
操作系统 跨平台
开源组织 腾讯
适用人群 未知
 软件概览

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

  • 相比 Webp、Apng 动图方案,具有高压缩率(素材更小)、硬件解码(解码更快)的优点
  • 相比 Lottie,能实现更复杂的动画效果(比如粒子特效)
  • 还能在动画中融入自定义的属性(比如用户名称, 头像)

项目背景

企鹅电竞是个直播平台,需要在直播间里显示酷炫的送礼动画。

动画越酷炫,对素材大小与解码性能要求越高,调研了很多方案,先给对比表:

- 文件大小 解码方式 特效支持
Lottie 无法导出 软解 无粒子特效
GIF 4.6M 软解 只支持8位色彩
Apng 10.6M 软解 全支持
Webp 9.2M 软解 全支持
mp4 1.5M 硬解 无透明背景
VAP 1.5M 硬解 全支持
  • 测试参数:
    • 手机: 小米mix3
    • 素材: 736 × 576 80帧
    • Apng: 75质量; Webp: 75质量; VAP: 2000码率

调研方案:

  1. 矢量动画方案(代表 Lottie):Lottie 矢量动画压缩率很高,但因为无法显示特殊效果(比如粒子特效),所以此方案不适合;
  2. 动图方案(代表 GIF, Apng, Webp):
    • GIF:只支持 8 位颜色,颜色丢失严重,解码性能低,无法满足特效效果;
    • Apng, Webp:能够满足特效效果,但文件大,软解效率低(低端的手机上,比如当年的红米1,解码过程甚至能导致整个直播间卡顿),这些问题很难接受;
  3. 视频方案(代表 mp4): 采用 H264 编码,相比动图方案,有很高的压缩率,硬件解码效率很高,缺点很明显,无法支持透明背景;

调研后发现,要么特效表现无法达到要求(Lottie, GIF),要么文件太大而且还是软解(Webp, Apng),要么不支持透明度(mp4),这些方案都不能满足我们的需求,于是高性能动画组件 VAP 诞生。

平台支持

支持:AndroidiOSweb. 接入说明在对应平台目录中

为大家更方便地使用组件,还有配套的素材制作工具 tool (工具目前只支持 Mac 版本)

 
  • 为了让大家更好的认识RBA VAP,本次给大家普及一下RBA的VAP审核和Non-VAP审核,方便大家在日后能灵活区分它们,并快速做出选择,让客户对您刮目相看,在验厂行业,脱离小白的昵称。 一、首先看看啥叫RBA认证? RBA 是由一众电子行业公司于2004年发起的,旨在建立一个适合电子行业供应链管理的社会责任、环保、商业道德标准。 2017年10月,因增加了来自零售、玩具和汽车等行业的新会员,

  • 要进行Wi-Fi开发的学习,做一些总结性的东西,这篇先进行一些常用名词总结解释 1.1 Wi-Fi WIFI是无线局域网联盟的一个商标,该商标仅保障使用该商标的商品互相之间可以合作,与标准本身实际上没有关系,但因为WIFI 主要采用802.11b协议,因此人们逐渐习惯用WIFI来称呼802.11b协议。从包含关系上来说,WIFI是WLAN的一个标准,WIFI包含于WLAN中,属于采用WLAN协议中

  • 呼吸机相关性肺炎(VAP)市场的企业竞争态势      该报告涉及的主要国际市场参与者有Philips Respironics、Hoffrichter、Tyco、Teleflex、Weinmann、ResMed、SYSMED、Fisher & Paykel等。这些参与者的市场份额、收入、公司概况和SWOT分析都包含在呼吸机相关性肺炎(VAP)市场调研报告中。 产品分类: 预防 理疗 免疫疗法 应用

  • https://cloud.tencent.com/developer/article/1693852 特点: 1.先前市面已有开源方案,并非先例 2.kotlin语言 3.代码量较小,很快就能理解大致逻辑 4.需要使用ffmpeg工具进行动画视频的二次处理   基本原理: 输入  mp4文件 -> MediaExtractor  -> 音频  -> AudioTrack            

 相关资料
  • 【动画模块性能】页面主要展示项目运行过程中动画模块的CPU占用情况,主要包括以下几个部分: 数据汇总 该项主要展示项目运行过程中的 “动画片段数量峰值”、“Animator.Update CPU均值”、“Animation.Update CPU均值” 和 “蒙皮网格更新CPU均值”。 注意: Animation.Update 对应的是Unity 3.x 动画系统,Animator.Update 对

  • 回头看看上一节显示的动画,它们是如何从一个空白的画布或白班变成一个复杂、漂亮的动画的?这些动画是怎么产生的?在变化过程中改变的特殊属性是什么?在回忆中摇晃你的手来表明一些物体应该移动或拉伸是不够的:如果你想要动画脱离你的手进入界面,你需要仔细思考在每一步中会发生什么以及哪些值被操作了。 如果你看一下上一节展示的动画GIF图,以及像CAPPTIVATE.co和其他网站展示的多种动画,并且你对发生了什

  • 动画组件控制动画的播放。 像其他组件一样为结点添加动画组件: import { Animation, Node } from "cc"; function (node: Node) { const animationComponent = node.addComponent(Animation); } 动画组件管理了一组动画剪辑。 动画组件开始运作前,它为每一个动画剪辑都创建了相应的

  • 我目前正在创建一个非常简单的JavaFX程序,模拟城市之间运送乘客的飞机和船只。到目前为止,我已经能够让飞机在几个城市进行短途飞行,但问题是,当我添加超过3或4架飞机时,动画速度非常慢。 我正在做的是使用Timeline类作为我的主游戏循环,清除并重新绘制画布上每帧60帧的平面图像。以下是时间表部分: 以下是我如何为平面创建新线程: 这是Plane类中定义的run()方法: 我知道代码非常混乱,但

  • 动画组 CABasicAnimation和CAKeyframeAnimation仅仅作用于单独的属性,而CAAnimationGroup可以把这些动画组合在一起。CAAnimationGroup是另一个继承于CAAnimation的子类,它添加了一个animations数组的属性,用来组合别的动画。我们把清单8.6那种关键帧动画和调整图层背景色的基础动画组合起来(清单8.10),结果如图8.3所示

  • 我明白为什么C 11中的类型提高了正确性和可运维性。我读到它也可以提高性能(赫伯·萨特的《几乎总是自动》),但我错过了一个很好的解释。 如何提高性能