字節(jié)跳動開源又一力作
【公眾號回復 “1024”,免費領(lǐng)取程序員賺錢實操經(jīng)驗】

大家好,我是章魚貓。
今天給大家推薦的這個項目是「AlphaPlayer」,是直播中臺使用的一個視頻動畫特效 SDK,可以通過制作 Alpha 通道分離的視頻素材,再在客戶端上通過 OpenGL ES 重新實現(xiàn) Alpha 通道和 RGB 通道的混合,從而實現(xiàn)在端上播放帶透明通道的視頻。
這套方案對設(shè)計師而言明顯降低了特效的制作成本,對于客戶端而言有著更可靠的性能和穩(wěn)定性,且相比 cocos2d 引擎有著更低的入門門檻和維護成本,為復雜動畫的實現(xiàn)提供了一種全新的方式,新的復雜動畫開發(fā)將會變得更加簡單高效。
背景
在直播項目的原有禮物動畫實現(xiàn)效果是通過 cocos 引擎實現(xiàn)的,大部分動畫都是通過一系列的旋轉(zhuǎn)平移縮放組合而成,能實現(xiàn)的動畫效果較簡單且開發(fā)成本較高。為了豐富動畫的表現(xiàn)形式,降低開發(fā)成本,引入了 AlphaPlayer 的動畫實現(xiàn)方案。
方案對比
目前較常見的動畫實現(xiàn)方案有原生動畫、幀動畫、gif/webp、lottie/SVGA、cocos 引擎,對于復雜動畫特效的實現(xiàn)做個簡單對比。

運行效果

項目結(jié)構(gòu) & 基本原理
主要有兩個核心部分,一個是 MediaPlayer,負責視頻每一幀的解碼,支持接入方自行實現(xiàn);另一個是 VideoRenderer,負責將解析出來的每一幀畫面進行 alpha 通道混合,再輸出到 Surface 上。View 使用的是 GLSurfaceView,性能相對 TextureView 更優(yōu),但層級限制在最頂層。
AlphaPlayer 內(nèi)部是通過 Render 渲染紋理畫面的,設(shè)計師導出的視頻資源會包含兩部分內(nèi)容——透明遮罩畫面和原視頻畫面兩部分,然后通過 shader 進行 alpha 值的混合,詳細可以看 frag.sh 和 vertex.sh。
已知接入方

點擊閱讀原文查看更多。
開源項目地址:https://github.com/bytedance/AlphaPlayer
開源項目組織:ByteDance Live Android team
推薦閱讀:
Google 出品網(wǎng)站性能質(zhì)量及錯誤分析工具
---特別推薦---
特別推薦:一個新的優(yōu)質(zhì)的推薦高效工具,軟件,插件的公眾號,每天給大家分享優(yōu)秀的效率工具,「程序員掘金」,專門為程序員挖掘好東西的一個公眾號,非常值得大家關(guān)注。
