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高性能组件!相关推荐

  1. 腾讯开源项目盘点:WeUI,WePY,Tinker,Mars等

    开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...

  2. 马化腾首谈腾讯开源时,鹅厂已在Github上放出82个项目,标星24万+ | 附AI项目链接...

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI "腾讯希望在科研领域投入更多力量,把'科技向善'纳入公司新的使命与愿景.我们将通过内外部开放源代码等方式,积极参与'全球科技共同 ...

  3. 腾讯开源 DCache,分布式 NoSQL 存储系统

    当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄:哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿.作为终端用 ...

  4. 第二篇|腾讯开源项目盘点:ncnn、xLua、libco等

    开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...

  5. 第一篇|腾讯开源项目盘点:WeUI,WePY,Tinker,Mars等

    开源展示了人类共同协作,成果分享的魅力,每一次技术发展都是站在巨人的肩膀上,技术诸多创新和发展往往就是基于开源发展起来的,没有任何一家网络公司可以不使用开源技术,仅靠自身技术而发展起来. 腾讯开源了个 ...

  6. 腾讯开源之道:基于Apache之道的开源实践与探索

    8月6日,腾讯开源联盟主席.腾讯云开源生态总经理单致豪在2021 ApacheCon Asia上分享了腾讯对Apache之道的思考.探索与实践的历程. 作为开源界备受关注的会议之一,今年的Apache ...

  7. MQ 技术产品井喷,今天来详聊一下腾讯开源消息中间件 TubeMQ | 原力计划

    作者 | kimmking 来源 | CSDN博客,责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 随着分布式技术的发展,MQ技术产品也出现井喷.目前除了各类常用的MQ,比如Apache ...

  8. 腾讯开源DCache,分布式NoSQL存储系统

    当你在电商平台秒杀商品或者在社交网络刷热门话题的时候,可以很明显感受到当前网络数据流量的恐怖,几十万商品刚开抢,一秒都不到就售罄:哪个大明星出轨的消息一出现,瞬间阅读与转发次数可以达到上亿.作为终端用 ...

  9. 腾讯开源内部跨端框架 Hippy,打磨三年,日均 PV 过亿

    12月20日,腾讯开源跨端框架 Hippy. 在腾讯内部,Hippy 已运行3年之久,跨 BG 共有 18 款线上业务正在使用 Hippy,日均 PV 过亿,且已建立一套完整生态.相较于其他跨端框架, ...

最新文章

  1. 古代荀子也懂AI?达芬奇的手术机器人有多神奇? 听浙大吴飞扒一扒人工智能的“古今中外”!
  2. x264编码参数大测试:10 trellis(1000Kbps)
  3. projecteuler_problem6
  4. java 自定义validate_Golang-03 自定义validator,实现java注解功能-Go语言中文社区
  5. 20个jQuery 图片及多媒体画廊插件
  6. android 仿美团悬浮,类似美团悬浮框的效果
  7. [机器学习]-[数据预处理]-中心化 缩放 KNN(二)
  8. Word 2013 打开时提示Windows installer窗口,然后安装失败
  9. CDC不同模式在ODI体现系列之二 异步模式
  10. 条令考试小程序辅助器_微信小程序条令考试刷分 微信小程序答题刷分软件
  11. bowen -猜拳游戏
  12. 【修真院“正直”系列之三】【修真神界】【修行卷】【第一章】修真院入场券...
  13. UVA-10347 Medians 计算几何 中线定理
  14. 算法85----手机九宫格
  15. java 读取pdf签名域_Java 获取PDF中的数字签名信息
  16. 数学基础知识之Sin、cos画圆
  17. 有时候缘分来了,挡也挡不住,我们终究能等到对的那个人。
  18. 溯本清源!天九共享用责任打造安全的投资平台
  19. Caused by: java.lang.NoClassDefFoundError: org/apache/curator/shaded/com/google/common/collect/Maps
  20. pta然后是几点c语言

热门文章

  1. UGUI 九宫格的使用
  2. 2036 改革春风吹满地(杭电)
  3. [EDI 案例] 汽车地带/Autozone EDI解决方案
  4. 浅谈Vue的iView
  5. wamp5 apache 配置好了 打localhost会出现index of 页面 解决
  6. 茶馆无线wifi短信认证方案
  7. Autojs豆瓣小组自动回帖机器人,模拟器可用
  8. Navicat12破解(Navicat Premium 12)
  9. 白话强化学习(理论+代码)
  10. MPU6050(读取原数据、移植DMP、stm32f4、HAL库、KEIL5)