1. 天璇項(xiàng)目簡(jiǎn)介
2019年3月,第六十八次AVS會(huì)議完成AVS3-P2基準(zhǔn)檔次制定工作,AVS3作為新一代視頻壓縮標(biāo)準(zhǔn),相比上一代標(biāo)準(zhǔn)AVS2和HEVC,可節(jié)省近30%碼率。會(huì)議之后,北京大學(xué)深圳研究生院數(shù)字媒體研究中心王榮剛老師團(tuán)隊(duì)便開始著手AVS3解碼器開發(fā),并于2019年12月同時(shí)在鵬城實(shí)驗(yàn)室啟智開源平臺(tái)和Github開源,項(xiàng)目代號(hào)為“天璇”,又名“uAVS3d”。開源之時(shí),uAVS3d已成雛形,解碼性能達(dá)業(yè)界領(lǐng)先水平,并覆蓋PC、手機(jī)等常用智能設(shè)備,開源之后至今(2021年1月13日),又迭代代碼60余次,性能、平臺(tái)適配和代碼魯棒性進(jìn)一步提升。
uAVS3d支持Android/IOS/Windows/Linux/MacOS等常用系統(tǒng)平臺(tái),并針對(duì)ARMv7/ARMv8/X86架構(gòu)處理器做了深度優(yōu)化,支持高位深(10bit)解碼,具備高效的并發(fā)性能。在PC端可以實(shí)現(xiàn)8K實(shí)時(shí)解碼,在移動(dòng)端可支持4K 30fps視頻實(shí)時(shí)播放。不論是單線程的解碼速度還是解碼并行度,uavs3d均大幅領(lǐng)先AV1的開源解碼器dav1d和aomdec。
PC端uAVS3d與AV1和HEVC常用解碼器的解碼性能對(duì)比如下:
2. 開發(fā)心得
天璇項(xiàng)目于2019年3月啟動(dòng),5月底即輸出x86優(yōu)化版本,可實(shí)現(xiàn)8K視頻實(shí)時(shí)解碼,之后又快速推出了Android和IOS版本,快節(jié)奏加之高性能引起了業(yè)內(nèi)不少關(guān)注。華為在uAVS3d移動(dòng)版本完成之后的第一時(shí)間(開源之前)便與我們接觸,針對(duì)華為手機(jī)做定制性優(yōu)化;騰訊、百度、愛奇藝、Bigo等視頻服務(wù)商也在開源前后相繼測(cè)試跟進(jìn),部分廠商已上線應(yīng)用;uAVS3d的接口文件也已集成至多媒體處理開源平臺(tái)FFmpeg的主分支,方便第三方集成驗(yàn)證。
取得如今的成果,著實(shí)不易,技術(shù)層面,uAVS3d之所以能快速成型,與所在團(tuán)隊(duì)多年的積累是分不開的,數(shù)字媒體研究中心曾先后研發(fā)AVS+/AVS2編解碼器,已積累大量?jī)?yōu)秀代碼和經(jīng)驗(yàn)。本人作為項(xiàng)目開發(fā)者之一,主要負(fù)責(zé)解碼器的關(guān)鍵模塊優(yōu)化,具體貢獻(xiàn)為添加分像素插值、幀內(nèi)預(yù)測(cè)、IDCT中DCT2部分、ALF、Deblock、SAO以及其它部分細(xì)節(jié)模塊的SIMD指令實(shí)現(xiàn),SIMD指令覆蓋SSE/AVX2/ARMv7/ARMv8,并且bitdepth為8和10的兩個(gè)版本獨(dú)立優(yōu)化;數(shù)據(jù)結(jié)構(gòu)方面,調(diào)整UV分量存儲(chǔ)結(jié)構(gòu),以提升SIMD并行效率。本人是15屆北大深研院數(shù)字媒體研究中心畢業(yè)生,讀研期間曾參與AVS2解碼器的模塊優(yōu)化,對(duì)各模塊的SIMD優(yōu)化細(xì)節(jié)有一定了解,17年重新加入團(tuán)隊(duì),之后,因項(xiàng)目需要,曾負(fù)責(zé)AVS2解碼器移動(dòng)端優(yōu)化,對(duì)解碼器部分結(jié)構(gòu)調(diào)整(UV分量重建像素交織存儲(chǔ),熵解碼實(shí)現(xiàn)調(diào)整)、完善ARMv7/ARMv8匯編,使得AVS2解碼器性能追齊業(yè)內(nèi)領(lǐng)先的HEVC解碼器。有了uAVS2d的開發(fā)經(jīng)驗(yàn)和代碼積累,uAVS3d的模塊優(yōu)化就順利很多,AVS3的基本框架與AVS2一脈相承,多個(gè)模塊大同小異,只是AVS3的塊尺寸類型比AVS2要多不少,給匯編優(yōu)化帶來一定挑戰(zhàn)。個(gè)人從uAVS3d項(xiàng)目開發(fā)中,收獲很多,加深了對(duì)編解碼框架的理解,移動(dòng)端開發(fā)和匯編代碼編碼也更加得心應(yīng)手。
關(guān)于項(xiàng)目社區(qū)的溝通協(xié)作和運(yùn)營(yíng),本人也是受益很大。第一次負(fù)責(zé)開源項(xiàng)目的運(yùn)營(yíng),項(xiàng)目說明、開源協(xié)議選擇、版本維護(hù)都趟過一些坑,好在選擇的開源平臺(tái)(啟智社區(qū)和Github)以及版本管理工具(git)功能完善,服務(wù)穩(wěn)定易用,目前項(xiàng)目維護(hù)已走上正軌。
最后,給開源社區(qū)的開發(fā)同僚們分享些個(gè)人體會(huì)和建議:
認(rèn)真對(duì)待每個(gè)開發(fā)細(xì)節(jié),項(xiàng)目整體的效能是眾多細(xì)節(jié)實(shí)現(xiàn)的集中體現(xiàn),細(xì)節(jié)實(shí)現(xiàn)水平可能就是項(xiàng)目脫穎而出的關(guān)鍵。
放平心態(tài),開源意在分享,為后來者鋪路,減少重復(fù)工作,不宜太計(jì)較單個(gè)項(xiàng)目的得失。技術(shù)講究厚積薄發(fā),認(rèn)真寫下的每一份代碼終是個(gè)人積累的財(cái)富。
項(xiàng)目啟動(dòng)之前做好調(diào)研分析,選擇合適的方向,了解現(xiàn)有工作,預(yù)估所能達(dá)到的效果,盡可能少做無用功。