腾讯开源的kotlin高性能组件!

发布时间:2021-11-27 09:40:26

1. VAP

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


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

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


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


2. 项目背景

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


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



文件大小解码方式特效支持
Lottie无法导出软解无粒子特效
GIF4.6M软解只支持8位色彩
Apng10.6M软解全支持
Webp9.2M软解全支持
mp41.5M硬解无透明背景
VAP1.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诞生。


3. 实现原理
方案选择

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


视频透明度实现

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


举个例子,解码器解码出一帧原始图像后,合成原理如图所示:



每一帧都做相同的事情,就是得到带透明度的视频,实际视频如下:


原始视频中,黑白区域承载Alpha数据。VAP最新版本里实现了Alpha区域大小可变,通过缩小Alpha区域大小,在不影响最终显示效果的同时,能有效减少视频分辨率,提高机型兼容性,而且为VAP的融合特性空余出多余的区域。


动画配置信息

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


mp4的组织方式与JSON的key-value组织方式很像,被称为一个BOX,我们创建一个新的BOX(vapc VAP Config),JSON内容放到这个BOX里,播放前先读取此BOX然后播放(ps: mp4规范里定义如果无法识别的BOX自动忽略,不影响mp4正常播放流程)。



VAP融合动画

VAP还支持在动画中融入自定义属性,比如用户名称, 头像。我们称其为VAP融合动画。


视频内容无法直接实现属性的插入,只能曲线救国,通过对属性图片进行修剪,欺骗用户的眼睛,让其看起来像是在视频内容里,实现最终的融合效果(效果如文章开头展示)。


为实现属性图片处理,需要引入“遮罩”素材,利用遮罩与属性图片进行Porter-Duff操作,就能得到需要的形状



再将结果贴到视频对应坐标位置,就能实现最后的融合效果。


“遮罩”素材保存在每一帧视频内容里,之前通过缩小Aplha区域,空出来的区域得到利用。


配套工具

为大家更方便的使用组件,还有配套的素材制作工具



项目地址

开源地址:https://github.com/Tencent/vap

相关文档

  • 美文故事-放手
  • 初中毕业给老师的赠言
  • Spring Cloud Gateway实战示例笔记
  • 关于员工辞职报告范文合集六篇
  • 手机很烧怎么办
  • 解决Model.fit_generator (from tensorflow.python.keras.engine.training) is deprecated and will be remov
  • 未来创客空间设计模型图片
  • 新买的含笑花怎么养
  • 发表日记
  • 吉他几岁开始学比较合适呢
  • 不结痂的疤 优秀读后感800字
  • Oracle如何复制表的sql语句
  • 冬天轮胎为什么会漏气冬天汽车为什么起步的时候轮胎那里会响
  • 支付宝钱包亲情账户位置 支付宝亲情账户入口
  • 什么是线程锁,什么是死锁,解决死锁的办法。
  • 嵌入式为什么要有操作系统
  • 漫谈 | 区块链2008:“蝙蝠侠”与“黑暗骑士”
  • 情侣对话个性签名
  • 实用迟到检讨书模板汇总6篇
  • 三星j3109换屏幕教程
  • 当你寂寞时,我会陪伴你
  • ListView 与CheckBox 触发事件冲突解决
  • 十岁成长礼主持人串词
  • 优秀班主任助理工作计划
  • php 删除相同的数组,php数组删除相同的值的方法_后端开发
  • 国际贸易学生求职信范文精选
  • 描写春天的小草的作文
  • 怎么样写给男朋友道歉信
  • 切割玻璃
  • 国庆表彰红旗团支部先进事迹
  • 猜你喜欢

  • 2009年机关党支部年终总结
  • (转载)拿什么报答你,我的父亲
  • 1 E.1 分部分项工程量清单计价表
  • 2019-中考英语作文:给海青的一封信(A Letter to Haiqing)-范文模板 (2页)
  • 会计研究生求职英文自我介绍范文3篇
  • 最新整理智能家居设计方案.docx
  • 2019幼儿园大班体育活动教案设计3篇
  • 浅谈气象科普进校园的意义
  • 交通银行借款合4-会计学堂
  • 沁县沁梅养殖有限公司企业信用报告-天眼查
  • 阳光体育运动背景下高校体育教学的改革现状与模式构建
  • 初中初二作文状物作文:无名的小草
  • 初三叙事作文:平安校园我的家_1000字
  • 2019-2020年高考数学一轮复习第九章解析几何第一节直线的倾斜角与斜率直线的方程课后作业理
  • 沈阳瑞鹏实业有限公司一分厂企业信用报告-天眼查
  • 手机不支持flash播放怎么办
  • 2019年3-6第六节函数图形的描绘.ppt
  • AUTOCAD全套建筑图纸设计教程第7章绘制建筑大样详图
  • 2019年初三议论文-生命1
  • 最新整理景观设计扩初方案.docx
  • 小学四年级写人作文:妈妈,母亲节快乐
  • 怎样搞好初三英语复*
  • 本钢汽运公司福利厂企业信用报告-天眼查
  • 中国能源建设集团广东电力工程局有限公司新能源建设分公司企业信用报告-天眼查
  • 河北省衡水市2019-2020学年中考第三次适应性考试生物试题含解析
  • 前世,今生!我们相遇散文
  • 2011年欧洲太阳能光电市场展望
  • 【高考化学】2018-2019学年化学高考(江苏)复*课件:专题二十三化学实验基本方法
  • 微信小程序标题栏和导航栏的设置 微信小程序教程系列(7)
  • 10.宇宙生命之谜(第一课时)
  • 试述城市学校电子阅览室建设与维护
  • 2018年有字开头的成语word版本 (3页)
  • 济南美第奇珠宝首饰有限公司(企业信用报告)- 天眼查
  • 化工生产企业的冬季安全“五防”
  • 办公室沟通原则十条
  • 往事如烟
  • 我会让你知道,你错过了什么_初中作文
  • 第5章制造业企业主要经济业务的核算1
  • eclipse 中使用内存分析工具MAT分析内存泄漏
  • 2018-2019学年高中数学苏教版选修4-2课件:2.4 2.4.2 二阶矩阵与二元一次方程组
  • 电脑桌面图关不了怎么办
  • 河南捷众网络科技有限公司企业信用报告-天眼查
  • 电脑版