点击上方“Github中文社区”,关注

看遍Github好玩的项目


大家好,我是huer!

有人留言咨询有没有kotlin相关的开源,今天给大家推荐一款,先看一下效果展示:

1. VAP

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

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

  • 相比Lottie,能实现更复杂的动画效果(比如粒子特效) 而且VAP还能在动画中融入自定义的属性(比如用户名称, 头像)

2. 项目背景

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

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

测试参数:

  • 手机: 小米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

OK!到这就是这期分享如果觉得文章有用,请点赞在看,分享。历史阅读
★ 中国 GitHub 霸榜乱象!国内程序员的脸都被丢尽了!★ GitHub 上 22 万star的第一抢票神器,3秒钟抢到!★ GitHub上10k+点赞,一套强大的后台管理系统竟然出了详细教程!★一款实现 C++、Java、Python 代码互译的工具,用起来很爽

点个在看呗

腾讯开源 Kotlin 高性能特效动画组件!相关推荐

  1. 腾讯开源Android动画库,腾讯开源的酷炫动画播放解决方案Vap初体验

    同事在群里有提到Vap,播放炫酷动画的,可以让动画背景透明,就去了解了下. 也可以看下面的视频播放效果(不动点击播放): 原本以为是直接弄个视频就可以播放. 后来查看官方案例,为了让动画背景有半透明特 ...

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

    1. VAP VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案. 相比Webp, Apng动图方案,具有高压缩率(素材更小).硬件解码(解码更快)的优点 ...

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

    VAP(Video Animation Player)是企鹅电竞开发,用于播放酷炫动画的实现方案. 相比Webp,Apng动图方案,具有高压缩率(素材更小).硬件解码(解码更快)的优点 相比Lotti ...

  4. 腾讯PAG动画组件技术,8K内容生产和传输应用实践,xR虚拟拍摄技术探索,影视生产与互联网音视频...

    腾讯PAG动画组件技术 Topic <动效素材极速交付:腾讯PAG动画组件技术揭秘> 陈仁健  腾讯 OVBU 计算内容中心副总监 音视频产品中的动效素材需求是源源不断的,例如贴纸花字,转 ...

  5. 腾讯研发动画组件,以后动画制作用PAG

    你好,我是tiantian. 我们知道,动画特效可以辅助视觉制作焦点,引导注意力的方向,越来越为广大视觉设计师青睐,并广泛应用于各类场景开发. 关于动画设计工具,既有 Framer.js.Origam ...

  6. 腾讯万亿级大数据组件 TubeMQ 正式开源

    点击上方"民工哥技术之路"选择"星标" 每天10点为你分享不一样的干货   来源:腾讯开源 9月12日,Apache软件基金会成立20周年之际,腾讯在Apach ...

  7. html5 特效 背景 腾讯,html5腾讯QQ登录界面背景动画特效

    特效描述:html5 腾讯QQ 登录界面 背景动画特效.腾讯QQ登陆界面动态背景,直接从腾讯网站获取,js代码有加密,做了个简单地示例 代码结构 1. 引入JS 2. HTML代码 *{margin: ...

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

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

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

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

最新文章

  1. 猫和老鼠服务器维修有问题,猫和老鼠:游戏中大范围的断网掉线问题 玩家:土豆服务器就这样...
  2. HTML --- 盒模型
  3. java职业发展路线图_Java程序员如何选择未来的职业路线
  4. LeetCode上求两个排序数组中位数问题—— Median of Two Sorted Arrays
  5. Oracle中rownum用法警示
  6. 跨平台APP JQuery Mobile开发-张晨光-专题视频课程
  7. shiro---注解
  8. 据说网易搜索引擎-超越GOOGLE
  9. (3)JavaScript 的注释
  10. delete index mysql_为什么MySQL不建议delete删除数据「心得分享」
  11. matlab 查找脉冲产生时间,脉冲时间信号MATLAB表示
  12. MRTG 监控主机流量
  13. Usb设备驱动5:usb-firmware简易框架
  14. 解锁三星bl锁有几种方法_三星S8有几种解锁方式?三星S8解锁方法介绍
  15. 三明计算机动漫与游戏制作,福建中小学电脑制作-福建中等职业教育与终身教育网.DOC...
  16. 【二十二】 H.266/VVC | 选择最优的仿射AMVP候选项 | xEstimateAffineAMVP函数
  17. 进入BeOS的花花世界 系列三
  18. Composer 原理使用
  19. 峨眉派的创始人真的是郭襄吗?
  20. Java初学者作业——为某超市设计管理系统,需要在控制台展示系统菜单,菜单之间可以完成跳转。

热门文章

  1. QDialog添加最大化最小化按钮
  2. mysql 密码忘记办法
  3. html5 自动扣图,html5利用canvas实现颜色容差抠图功能
  4. 脱离文档流和半脱离文档流(详解)
  5. 编译原理及编译程序构造-绪论
  6. Linux起服务常用命令及实例
  7. 微前端子应用nginx跨域配置
  8. 医疗软件实施入门02
  9. 学IT,看教程,看视频,你必须知道的学习网站
  10. 一些关于HTML与CSS的总结与实际应用