字节跳动开源了一个视频动画特效SDK(AlphaPlayer),可以通过制作Alpha通道分离的视频素材,再在客户端上通过OpenGL ES重新实现Alpha通道和RGB通道的混合,从而实现在端上播放带透明通道的视频。

AlphaPlayer已经在Github上标星650,累计分支 277

抖音、抖音火山版、西瓜小视频、今日头条已经接入。

这套方案对设计师而言明显降低了特效的制作成本,对于客户端而言有着更可靠的性能和稳定性,且相比cocos2d引擎有着更低的入门门槛和维护成本,为复杂动画的实现提供了一种全新的方式,新的复杂动画开发将会变得更加简单高效。

效果

AlphaPlayer

AlphaPlayer是直播中台使用的一个视频动画特效SDK,可以通过制作Alpha通道分离的视频素材,再在客户端上通过OpenGL ES重新实现Alpha通道和RGB通道的混合,从而实现在端上播放带透明通道的视频。

这套方案对设计师而言明显降低了特效的制作成本,对于客户端而言有着更可靠的性能和稳定性,且相比cocos2d引擎有着更低的入门门槛和维护成本,为复杂动画的实现提供了一种全新的方式,新的复杂动画开发将会变得更加简单高效。

背景

在直播项目的原有礼物动画实现效果是通过cocos引擎实现的,大部分动画都是通过一系列的旋转平移缩放组合而成,能实现的动画效果较简单且开发成本较高。为了丰富动画的表现形式,降低开发成本,我们引入了AlphaPlayer的动画实现方案。

方案对比

目前较常见的动画实现方案有原生动画、帧动画、gif/webp、lottie/SVGA、cocos引擎,对于复杂动画特效的实现做个简单对比

在复杂动画特效高效实现的场景中,我们的备选方案会更少一些,可以将讨论集中在Cocos2d、Lottie、Webp和本文的AlphaPlayer上。

Lottie

Lottie是非常优选的多平台动画效果解决方案,其简单原理是将AE动画导出的json文件解析成每个layer层级对象,再绘制成对应的Drawable,最后显示在View上。在不涉及mask和mattes等特性时性能非常优选,主要耗时基本集中在Canvas#draw()上而已,json解析时通过流读取的方式避免一次性加载全部json数据带来的OOM问题。

但是也存在部分不足:

  1. 如果动画涉及到mask或mattes等特性时,需要生成2~3个临时bitmap实现动画效果,容易引起内存抖动,且涉及的canvas#saveLayer()和canvas#drawBitmap()会带来额外的耗时;
  2. 如果动画中还直接使用了图片,在ImageAssetManager首次对图片解码是在主线程进行的(据了解在iOS的版本上,使用图片导致内存和CPU的性能消耗会更大);
  3. 主要耗时还是在draw()上,绘制区域越大耗时越长;
  4. 目前支持的AE特性还有待完善,此外有一些特性在低版本上可能还会没有效果,设计资源时需要规避。(Supported After Effect Features)

实际使用过程中,最常见的首启全屏引导动画基本都会包含上面提到的前三点不足,这种情况下性能其实是大幅退化的。因此对于直播场景的复杂特效动画而言,Lottie就不是一个很合适的实现方案了。

Cocos2d-x

Cocos2d-x支持非常多的游戏功能,诸如精灵、动作、动画、粒子特效、骨骼动画等等,可以供开发者自由实现各种姿势的动画效果,再加上自身具备跨平台能力和轻量级,同时支持Lua作为开发语言,可以说是非常适合植入移动端作为动画效果实现方案的游戏引擎。

但实际使用维护中会面临很多问题:

  1. 体积大,即使经过裁剪也还有2M左右的大小,如果不是核心场景需要基本很难允许接入;
  2. 对开发者的技术栈有较高要求;
  3. 无法满足快速迭代;
  4. 维护难度大,尤其是在Android机型兼容的问题上。

Webp

Webp相比PNG和JPEG格式体积可以减少25%,在移动端的平台支持上也很全面,支持24位RGB色;缺点是资源体积比较大,而且使用的软解效率低下,低端机上有明显卡顿问题。

AlphaPlayer

相比于上面提到的几个方案,AlphaPlayer的接入体积极小(只有40KB左右),而且对动画资源的还原程度极高,资源制作时不用考虑特效是否支持的问题,对开发者和设计师都非常友好。通过接入ExoPlayer或者自研播放器可以解决系统播放器在部分机型上可能存在的兼容性问题,且能带来更好的解码性能。

基本原理

AlphaPlayer主要有两个核心部分,一个是MediaPlayer,负责视频每一帧的解码,支持接入方自行实现;另一个是VideoRenderer,负责将解析出来的每一帧画面进行alpha通道混合,再输出到Surface上。View使用的是GLSurfaceView,性能相对TextureView更优,但层级限制在最顶层。

AlphaPlayer内部是通过Render渲染纹理画面的,设计师导出的视频资源会包含两部分内容——透明遮罩画面和原视频画面两部分,然后通过shader进行alpha值的混合,详细可以看 frag.sh和vertex.sh。

传送门

地址:
https://github.com/bytedance/AlphaPlayer

字节跳动又一开源力作发布相关推荐

  1. 字节跳动亿级DAU客户端发布实践

    本文是字节跳动发布工程团队的高磊讲师在2021 GOPS 全球运维大会中「字节跳动亿级DAU客户端发布最佳实践」的分享全文. 首先做一下自我介绍:我是字节跳动发布工程团队的工程师高磊.从事软件开发工作 ...

  2. 腾讯又一开源力作发布

    点击上方"码农突围",马上关注 这里是码农充电第一站,回复"666",获取一份专属大礼包 真爱,请设置"星标"或点个"在看&quo ...

  3. 厉害了!腾讯又一开源力作发布!

    击上方"Github中文社区",关注看遍Github好玩的项目大家好,我是hub哥!圣诞节快乐 Tendis是腾讯互娱CROS DBA团队 & 腾讯云数据库团队自主设计和研 ...

  4. 字节跳动大佬全新开源:Python数据分析实例,建议收藏!

    近几年,互联网领域进入大数据红利时代.包括腾讯.阿里.字节在内的各大巨头,依靠基于大数据的商业模式成为了当下最挣钱的公司. 所以行业对数据人才的需求量巨大,仅字节一家在本季度就有近千个数据类职位虚席以 ...

  5. 字节跳动发布独立业务品牌「大力教育」,陈林出任CEO

    "未来,字节跳动旗下所有的教育产品将由大力教育承接." "今天,我正式把一个全新的独立品牌--大力教育--介绍给大家.未来,字节跳动旗下所有的教育产品将由大力教育承接.& ...

  6. 爬取了1W个字节跳动岗位信息,我发现了什么?

    前言 过了春节,春招应该就正式开始了,很多小伙伴应该已经提前准备起来了.最近在家闲来无事,突发奇想自己想看看字节跳动的岗位需求,毕竟字节这两年发展的势头确实非常猛,不少小伙伴都想加入. 正文 字节跳动 ...

  7. 字节跳动(今日头条),为何战斗力如此凶猛?

    字节跳动(今日头条),为何战斗力如此凶猛? 年前,一位久未联系的朋友问京杭君: 有没有研究过今日头条? 还有没有上升空间? 这位朋友在杭州阿里工作多年,后出来创业,有猎头联系他,今日头条要在杭州成立技 ...

  8. 字节跳动(今日头条),战斗力为何如此凶猛?| 畅言

    作者 | 岳京杭 责编 | 郭   芮 Python这么火,为什么还不学? https://edu.csdn.net/topic/python115?utm_source=csdn_bw 年前,一位久 ...

  9. 音乐、游戏、教育,谁是字节跳动的下一个“抖音”?

    务实且浪漫的字节跳动,不知何时才能找到下一个"抖音". 全文5809字,阅读约需11分钟 来源 | 亿欧网 文|王乙淇 编辑|张宇喆 7月1日,字节跳动被曝已将音乐升级为P1优先级 ...

最新文章

  1. Java求字符串中出现次数最多的字符
  2. PHP代码优化的细节
  3. 阿里云服务器部署php的laravel项目,在阿里云买ECS 搭建 Linux+Nginx+Mysql+PHP环境的
  4. mysql和mysqldump出现command not found 问题解决
  5. apipost提示error:invalid protocol的解决方案
  6. get、post请求参数乱码解决方法(qq:1324981084)
  7. vscode中断点调试nodejs实用方便
  8. kubernetes 安装 helm,ingress
  9. java 1.8 内存告警问题
  10. 用 Truffle 插件自动在Etherscan上验证合约代码
  11. ELK日志分析系统迁移记录
  12. 申屠青春对“链”和“币”的再思考
  13. EnableQ在线问卷调查引擎V3.0发布
  14. SE91 SAP消息类型
  15. Adobe Dreamweaver CS6快捷键使用
  16. pxe网络安装服务器的部署
  17. 天啦噜!Stateflow动态测试竟然so easy
  18. jquery-question
  19. 知物由学 | AI网络安全实战:生成对抗网络
  20. BCI Competition 2008 – Graz dataset A个人翻译(附MATLAB安装BioSig)

热门文章

  1. 微软基础认证信息汇总
  2. 与或非门电路的实现原理。
  3. 8人抢答器程序c语言,八路抢答器c语言程序.doc
  4. “脚本错误”到底意味着什么?
  5. 一个计算一元二次函数的C语言程序
  6. mysql 不严谨模式_mysql不严谨模式怎么开启?
  7. Morgan Stanley OA题库
  8. Apache Kylin 大数据时代的OLAP利器
  9. linux固态硬盘寿命,选SSD固态硬盘不必太纠结TLC MLC的寿命问题
  10. 推箱子编码c语言,c语言知识推箱子代码.doc