朱政:金山H.265诞生记
本文來自時任金山云算法總監(jiān)朱政在LiveVideoStackCon 2017上的分享,并由LiveVideoStack整理而成。朱政闡述了金山云265方案(KS265)的演進之路,以及他們?nèi)绾我徊讲皆诠こ?#xff0c;算法和測試上完善金山云265。目前朱政已成為杭州微幀信息科技的創(chuàng)始人,繼續(xù)在編解碼這條路上探索極致。
文 / 朱政
整理 / LiveVideoStack
概覽
金山云265大家或多或少都聽過,因為其在某一方面確實有做的比較優(yōu)秀。作為底層開發(fā)的團隊,首先我會更加關(guān)注代碼本身,其次會盡量多和大家分享一些干貨。由于我們的技術(shù)不是開放和開源的,所以本次會根據(jù)金山云265的演進之路來分享一些偏宏觀的經(jīng)驗心得和方法。
分享的主要內(nèi)容為:
1,序章:致敬X264
2,金山云265破繭而出
3,痛點與解決之道
4,未來展望
序章:致敬X264
X264編碼器的優(yōu)秀應(yīng)該是大家公認的,它號稱是視頻編碼的守望者。X264雖然是一個開源的編碼器,但幾乎商用的編碼器都做不到它那么好。它創(chuàng)造了許多眾所周知的工具和名詞,如Mbtree,CRF,2PASS。在國內(nèi)外對X264的使用非常廣泛,它繁榮了H.264的內(nèi)容和生態(tài)。另外,如果要做一款非常好的編碼器,并具有一定的速度和壓縮性能的基礎(chǔ),是需要花很多年時間和精力的,而X264就極大地解放了視頻編碼底層開發(fā)的勞動力。
在這里先展示一下金山云265當前的性能對比:
?
性能摘要匯總
以Veryfast為例性能摘要
破繭而出
在最開始起步的時候,我們設(shè)定的目標就是要與X264復(fù)雜度對標,思考如何在保證HEVC高壓縮比的情況下,速度和功耗無限接近X264。起初想的就是要從零開始和從實時檔次開始做。接下來會給大家介紹我們這四年來的主要工作,會從以下四個方面來介紹:重構(gòu)與推倒重來,工程化追求極致,算法,測試。
1, 重構(gòu)與推倒重來
如果我們考慮從HM來改版的話,有一個好處就是工具比較全,但它的缺陷就在于重構(gòu)優(yōu)化難以駕馭,要想做實時就非常的難。所以我們就要從零開始,第一次從零開始,首先就要選取一些工具來實現(xiàn),包括一些壓縮性能非常好的復(fù)雜工具都需要精心設(shè)計。然后就是效仿x264的快速檔,不做RDO。但第一次做出的版本,速度很不理想,和x264相比,Superfast檔的差距非常大,壓縮性能也沒有多大的優(yōu)勢。因此,果斷推倒重來,進行第二次從零開始。
積累之前的經(jīng)驗教訓(xùn),對通篇更加熟悉,進行第二次從零開始,重新優(yōu)化數(shù)據(jù)結(jié)構(gòu)和算法流程,更加專注于極致契合極限編程,也實現(xiàn)更多的工具。
?
2, 工程化追求極致
在工程方面,我們投入了很多的精力。我們會進行快速迭代,不斷試錯,找到突破口;由于當時團隊人數(shù)不是很多,因此采用小團隊結(jié)對編程,每個人都要熟系所有的代碼;每次都要單元測試先行,嚴格執(zhí)行Code Review,每一處代碼和數(shù)據(jù)結(jié)構(gòu)都要精益求精;解碼器也要追求極限速度;宗旨就是,不怕麻煩,只怕性能不夠,因此幾乎是把95%的精力都投入到5%的性能提升上。
下面給大家舉個工程優(yōu)化的例子:
?
?
解碼器作為編碼器的副產(chǎn)品,也耗費了大量的精力?,F(xiàn)在已經(jīng)做到了比OpenHEVC平均提速2倍,并且全標準支持,魯棒性強。
3, 算法
由于不開源的原因,也就不能給大家分享核心的算法流程,但會在宏觀上為大家介紹一下。在算法設(shè)計上,我們設(shè)定了高目標,一個月一次迭代。目前快速算法約70個,算法相關(guān)的配置參數(shù)約200個,配置參數(shù)應(yīng)用到API接口的配置方法可能很多用戶不知道,所以我們沒有完全開放。在做快速算法的過程中,會往里面不斷加入好的工具,為了將H.265的壓縮性能發(fā)揮出來,所以它的一些壓縮工具都要盡量用上。下面就是用到的一些快速檔次工具集:
整個算法設(shè)計過程就是:設(shè)計和實驗算法,調(diào)試bug和不匹配,實現(xiàn)新工具和新Feature優(yōu)化代碼。下面展示快速算法不同檔次性價比:
4, 測試永不停歇
測試一方面可以分為性能測試和正確性測試兩方面,另一方面也可以分為單元測試,CI測試,算法測試,版本迭代測試。
性能測試就包括了復(fù)雜度的性能和壓縮性能,具體分為以下方面:
正確性測試也是涵蓋多方面的,具體分為以下方面:
講完上面四個方面,下面就來介紹一下金山云265的發(fā)展里程碑:
目前金山云265編碼器支持的一些Feature:
?
痛點與解決之道
金山云265最開始的困難就是研發(fā)困難,包括復(fù)雜度高,瀏覽器Flash,JS不支持等,經(jīng)過我們努力也想出了一些解決的辦法。
在用戶方面,經(jīng)常會存在一些難點,比如播放體驗差,帶寬成本高等,這些使用我們的金山云265就可以得到改善。另外客戶經(jīng)常也會有一些顧慮,我們也都提供了相應(yīng)的解決辦法。
下面就給大家展示一個金山云產(chǎn)品解決方案,這是一個包含云轉(zhuǎn)碼,客戶端SDK,全面覆蓋直播,點播,短視頻的解決方案:
未來展望
接下來,要做的事情,就是解決客戶的多樣化需求和本身編碼器不平衡,以及不充分的研發(fā)之間的矛盾,所以會從之前著重于實時檔,到現(xiàn)在的更關(guān)注慢速檔,爭取在離線轉(zhuǎn)碼上面有更好的壓縮效率,在中低碼率上面也會更多的關(guān)注高碼率。另外就是在基礎(chǔ)設(shè)施上面會更多的關(guān)注上層建筑,這里只是一個自己的定義,是代碼內(nèi)部的,上層建筑就包括像碼控, 場景調(diào)優(yōu),主觀調(diào)優(yōu),自適應(yīng)量化,就像阿里云他們做的窄帶高清的事情。另外我們還會嘗試極致壓縮,就是用深度學(xué)習(xí)在符合現(xiàn)有編碼標準的框架里測試,是否能夠獲得更好的壓縮性能。
總結(jié)
以上是生活随笔為你收集整理的朱政:金山H.265诞生记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LiveVideoStackCon讲师热
- 下一篇: 音视频技术开发周刊 63期