腾讯开源的kotlin高性能组件!
1. VAP
VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案。
相比Webp, Apng动图方案,具有高压缩率(素材更小)、硬件解码(解码更快)的优点
相比Lottie,能实现更复杂的动画效果(比如粒子特效)
而且VAP还能在动画中融入自定义的属性(比如用户名称, 头像)
2. 项目背景
企鹅电竞是个直播平台,需要在直播间里显示酷炫的送礼动画。
动画越酷炫,对素材大小与解码性能要求越高,调研了很多方案,先给对比表:
文件大小 | 解码方式 | 特效支持 | |
---|---|---|---|
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诞生。
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
腾讯开源的kotlin高性能组件!相关推荐
- 腾讯开源项目盘点:WeUI,WePY,Tinker,Mars等
开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...
- 马化腾首谈腾讯开源时,鹅厂已在Github上放出82个项目,标星24万+ | 附AI项目链接...
乾明 发自 凹非寺 量子位 报道 | 公众号 QbitAI "腾讯希望在科研领域投入更多力量,把'科技向善'纳入公司新的使命与愿景.我们将通过内外部开放源代码等方式,积极参与'全球科技共同 ...
- 腾讯开源 DCache,分布式 NoSQL 存储系统
当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄:哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿.作为终端用 ...
- 第二篇|腾讯开源项目盘点:ncnn、xLua、libco等
开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...
- 第一篇|腾讯开源项目盘点:WeUI,WePY,Tinker,Mars等
开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...
- 腾讯开源之道:基于Apache之道的开源实践与探索
8月6日,腾讯开源联盟主席.腾讯云开源生态总经理单致豪在2021 ApacheCon Asia上分享了腾讯对Apache之道的思考.探索与实践的历程. 作为开源界备受关注的会议之一,今年的Apache ...
- MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划
作者 | kimmking 来源 | CSDN博客,责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 随着分布式技术的发展,MQ技术产品也出现井喷.目前除了各类常用的MQ,比如Apache ...
- 腾讯开源DCache,分布式NoSQL存储系统
当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄:哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿.作为终端用 ...
- 腾讯开源内部跨端框架 Hippy,打磨三年,日均 PV 过亿
12月20日,腾讯开源跨端框架 Hippy. 在腾讯内部,Hippy 已运行3年之久,跨 BG 共有 18 款线上业务正在使用 Hippy,日均 PV 过亿,且已建立一套完整生态.相较于其他跨端框架, ...
最新文章
- 古代荀子也懂AI?达芬奇的手术机器人有多神奇? 听浙大吴飞扒一扒人工智能的“古今中外”!
- x264编码参数大测试:10 trellis(1000Kbps)
- projecteuler_problem6
- java 自定义validate_Golang-03 自定义validator,实现java注解功能-Go语言中文社区
- 20个jQuery 图片及多媒体画廊插件
- android 仿美团悬浮,类似美团悬浮框的效果
- [机器学习]-[数据预处理]-中心化 缩放 KNN(二)
- Word 2013 打开时提示Windows installer窗口,然后安装失败
- CDC不同模式在ODI体现系列之二 异步模式
- 条令考试小程序辅助器_微信小程序条令考试刷分 微信小程序答题刷分软件
- bowen -猜拳游戏
- 【修真院“正直”系列之三】【修真神界】【修行卷】【第一章】修真院入场券...
- UVA-10347 Medians 计算几何 中线定理
- 算法85----手机九宫格
- java 读取pdf签名域_Java 获取PDF中的数字签名信息
- 数学基础知识之Sin、cos画圆
- 有时候缘分来了,挡也挡不住,我们终究能等到对的那个人。
- 溯本清源!天九共享用责任打造安全的投资平台
- Caused by: java.lang.NoClassDefFoundError: org/apache/curator/shaded/com/google/common/collect/Maps
- pta然后是几点c语言