制作網(wǎng)站服務(wù)企業(yè)查詢軟件
? //??
編者按:隨著視頻直播不斷向著超高清、低延時、高碼率的方向發(fā)展, Apple Vision的出現(xiàn)又進(jìn)一步拓展了對3D, 8K 120FPS的視頻編碼需求,視頻的編碼優(yōu)化也變得越來越具有挑戰(zhàn)性。LiveVideoStackCon 2023上海站邀請到騰訊云的姜驁杰老師分享騰訊云V265/TXAV1直播場景下的編碼優(yōu)化和應(yīng)用,帶領(lǐng)我們探索音視頻技術(shù)的無限可能性。
文/姜驁杰
編輯/LiveVideoStack
大家好,我是姜驁杰,來自騰訊云,主要負(fù)責(zé)編解碼開發(fā)和優(yōu)化。今天分享的主題是騰訊云V265/TXAV1直播場景下的編碼優(yōu)化和應(yīng)用。
共有三個部分:1、V265/TXAV1直播能力介紹;2、V265/TXAV1典型直播業(yè)務(wù)實踐;3、騰訊云在直播場景下的編碼優(yōu)化技術(shù)要點(diǎn)。
-Part 1-
V265/TXAV1直播能力介紹
當(dāng)今互聯(lián)網(wǎng)時代,視頻直播由于可以更直接的連接服務(wù)商和消費(fèi)者,已經(jīng)成為了一種受歡迎且廣泛應(yīng)用的傳媒形式。人們可以通過直播平臺實時觀看各種內(nèi)容,第一時間表達(dá)或獲得最真實的見解和體驗。從在線教育到體育賽事直播,從游戲直播到帶貨直播,直播應(yīng)用正不斷擴(kuò)大其影響力,直播行業(yè)的發(fā)展呈現(xiàn)出多樣化和快速增長的趨勢。隨著用戶對高質(zhì)量視頻的需求不斷增加,視頻編碼技術(shù)在直播領(lǐng)域的應(yīng)用變得尤為重要。
當(dāng)前,AV1/265編碼器以其高效的壓縮性能和健全的生態(tài),已經(jīng)在直播領(lǐng)域得到廣泛應(yīng)用。首先,它們能夠以更高的壓縮效率傳輸高質(zhì)量的視頻內(nèi)容。這意味著在相同的帶寬下,直播平臺可以提供更清晰、更細(xì)膩的圖像,讓觀眾享受更逼真的觀看體驗。其次,AV1/265編碼器具有較低的碼率需求,可以減少網(wǎng)絡(luò)傳輸?shù)呢?fù)擔(dān),提高直播的穩(wěn)定性和可靠性。
為了進(jìn)一步優(yōu)化直播編碼器的性能、提升騰訊云的直播服務(wù)能力,騰訊云架構(gòu)平臺部香農(nóng)實驗室近一年多專門針對AV1/265編碼器進(jìn)行了直播優(yōu)化,致力于解決直播領(lǐng)域的挑戰(zhàn), 例如針對超高清視、高分辨率、高碼率下視頻編碼的速度和質(zhì)量的平衡,低延遲直播以及3D直播的壓縮性能等,為騰訊云提供更高質(zhì)量、更穩(wěn)定、更具互動性的直播體驗。
在剛剛結(jié)束的MSU2022比賽中, 我們的TXAV1/V265編碼器,在相應(yīng)的AV1/265賽道中,均取得了非常優(yōu)秀的成績,拿到了絕大部分指標(biāo)的第一。尤其是在直播相關(guān)的30fp比賽項目中,V265平均比X265節(jié)省30%以上的碼率,TXAV1平均碼率能夠節(jié)省40%。同時,在云轉(zhuǎn)碼(480p,720p,1080p)的比賽中V265/TXAV1也均包攬了比賽前兩名。
這是我們內(nèi)部迭代測試,在直播場景下,V265/TXAV1的性能表現(xiàn):
V265相比X265 medium:在加速20%的情況下,碼率節(jié)省大于36%;加速6倍下仍然有比較大的碼率節(jié)省。
TXAV1相比X265 medium:在速度相當(dāng)?shù)那闆r下,碼率節(jié)省大于40%;加速1.5倍下碼率仍然有35%以上的節(jié)省。
TXAV1相比V265:在相近速度下,仍有10%左右的壓縮率提升。
-Part 2-
V265/TXAV1典型直播業(yè)務(wù)實踐
2.1 8K直播
在8K直播方面,我們的業(yè)務(wù)能力總結(jié)為三點(diǎn):全功能、低延時、高性能。
全功能:能夠最大支持8K、60fps、10bit、150Mbps、422、HDR 、ABR直播,基本滿足目前市面上所有的功能需求。
低延時:能夠采用單一設(shè)備,最高支持到8K,60fps,無需分布式,將編碼延時控制到最低。
高性能:即使在8K 60pfs下, 壓縮性能仍然明顯高于X265 medium檔,并有近9倍的加速。
2.2 快直播
為什么需要快直播?
快直播主要應(yīng)用在電商直播、秀場直播及在線教育等場景,需要與觀眾進(jìn)行實時互動和交流。實時互動對延時的要求非常高,快直播延時要求在500-1000ms以內(nèi),比標(biāo)準(zhǔn)直播的延時要求嚴(yán)格很多。
但是低延時會對編碼器的性能造成很大挑戰(zhàn),主要體現(xiàn)在預(yù)分析更短(可以提前獲得的有效信息更少)、GOP更小(對壓縮性能產(chǎn)生比較大的壓力)、幀級并行更少(會影響多線程下的編碼速度)。因此優(yōu)化的重點(diǎn)是在保證速度的前提下提升性能。經(jīng)過針對性的優(yōu)化,目前快直播場景相較于優(yōu)化前有5%-7%的碼率節(jié)省。
2.3 MV-HEVC
蘋果全球開發(fā)者大會(WWDC)上正式發(fā)布Apple Vision Pro 時,提到它通過支持MV-HEVC 編碼標(biāo)準(zhǔn)的硬件編解碼顯著提升了 3D 視頻主客觀體驗。而在這之前,騰訊就已經(jīng)完成了對MV-HEVC 編碼的支持以幫助壓縮3D視頻,獲得更好的3D視頻主觀質(zhì)量。左邊是常見的3D視頻壓縮方式:把左右視點(diǎn)圖像進(jìn)行拼接后用通用編碼器進(jìn)行壓縮,解碼后再重新拆分成左右2個視頻。這也是為什么下載的3D視頻如果不是用3D方式打開的時候,出現(xiàn)的圖像是左右分開的。
右邊是MV-HEVC 3D視頻壓縮方式,并沒有把兩個視點(diǎn)拼接,而是將多個視點(diǎn)組成一組相同時間下的圖像組進(jìn)行編碼。這樣的好處是視頻的左右眼不再是相互獨(dú)立的,而是具有參考關(guān)系,這樣便 能很好的提升壓縮效率。
MV-HEVC的原理:利用了左右視點(diǎn)圖像間的冗余信息,進(jìn)一步提高圖像的壓縮效率。例如,如果按照常用左右拼接的方式,第一幀的左右視點(diǎn)都是I幀,壓縮性能比較差。但是如果按照多視點(diǎn)編碼方式編碼,那么左視點(diǎn)是I幀,而右視點(diǎn)是P幀, 因此右眼可以充分參考左眼的信息,壓縮效果就能明顯提升。當(dāng)左右眼視差較小的時候,壓縮效果提升會更加明顯。
我們目前的測試結(jié)果包括8個JCT3V測試序列和5個3D電影,最后平均壓縮收益能超20%。如結(jié)果所示,3D電影的收益更大些,因為3D電影中有很多的遠(yuǎn)景視頻,故左右眼視差較小,而MV-HEVC對于圖像運(yùn)動越劇烈或左右眼視差越小,得到的壓縮收益也會越大。
-Part 3-
騰訊云在直播場景下的編碼優(yōu)化技術(shù)要點(diǎn)
3.1.1 工程優(yōu)化:數(shù)據(jù)結(jié)構(gòu)
對于大分辨率、高碼率、高幀率的視頻編碼而言,由于其對速度的要求更高,因此更需要精簡的核心數(shù)據(jù)結(jié)構(gòu)及優(yōu)化的流程,因為每一次重復(fù)計算或拷貝都可能帶來明顯的降速?;谶@種要求,對于從零開始做的V265以及TXAV1編碼器,我們從設(shè)計伊始就明確了目標(biāo):將核心數(shù)據(jù)結(jié)構(gòu)盡量設(shè)計高效、精簡:
1、TreeNode:方便獲取節(jié)點(diǎn)屬性信息,避免重復(fù)計算。比如圖像節(jié)點(diǎn)能否再劃分,有哪些可用模式,寬高位置等基本屬性都可以通過提前計算得到。
2、CoreUnit:核心儲存結(jié)構(gòu),能夠存儲核心編碼信息,既能節(jié)省算法頻繁訪問耗時,還能幫助高效獲得周邊塊的信息。
3、IdenticalCu:利用相同Cu計算結(jié)果,減少計算量。鑒于有些塊的劃分方式在不同節(jié)點(diǎn)下其實是一樣的,IdenticalCu能夠避免繼續(xù)劃分,提前存儲信息,實現(xiàn)重復(fù)使用。
4、SwapBuffer:通過內(nèi)存交替使用,減少拷貝和重算。對比SwapBuffer使用前后的性能發(fā)現(xiàn),使用后通測能夠提升5%的速度,而在8K方面能有20%以上的提速。也就是說,對于8K,重復(fù)計算、拷貝和大內(nèi)存的訪問都可能會帶來更大程度的降速。
3.1.2 工程優(yōu)化:流程優(yōu)化
針對超高清、高碼率、高幀率的視頻編碼特性,進(jìn)一步優(yōu)化流程。以AV1為例,原流程中,同一CTU的分析、濾波、編碼不同時完成,這是由于濾波依賴幀級的參數(shù),而我們無法在當(dāng)前塊操作結(jié)束之后就得到幀級參數(shù),進(jìn)行濾波,只能通過一些算法盡早獲得整幀濾波參數(shù),提高并行度。但這樣的做法會增加數(shù)據(jù)拷貝,影響速度和cache命中率。
經(jīng)過分析后發(fā)現(xiàn),濾波對超高清、高碼率、高幀率的視頻壓縮性能影響變小,但對整體速度影響較大,性價比變差,因此可以適當(dāng)?shù)販p少一些濾波操作。此外,在高幀率下,幀間濾波參數(shù)相似度更高,高層幀更傾向不濾波。所以,是否有可能跳過或者復(fù)用其它幀濾波參數(shù)?因此我們設(shè)計了一套自適應(yīng)濾波算法,減少濾波使用或參數(shù)推導(dǎo)。
這樣整個流程就有了很大的優(yōu)化空間:對于不需要做參數(shù)推導(dǎo)的幀,當(dāng)前CTU做完了分析之后就可以立即進(jìn)行濾波、編碼,免去了拷貝和加載的操作,明顯提升了編碼速度。其實V265一直采用這個編碼流程,但由于AV1濾波參數(shù)導(dǎo)出的原因在最開始的設(shè)計中沒有辦法實施。
最終修改之后在8K序列上的測試能夠提升5%以上,在通測序列下由于濾波跳過得比較少,因此速度影響相對比較小。
3.1.3 工程優(yōu)化:多線程
這是多線程總流程圖。我們將多線程分了很多部分,包括預(yù)分析、幀級、SLICE/TILE級、宏塊級、后處理等,針對每一部分都設(shè)計了可以提升并行度的算法。
比如幀級中無參考幀間并行、高并發(fā)的參考幀優(yōu)化、幀級優(yōu)先級調(diào)整;宏塊級中WPP分析并行、類WPP并行;后處理中濾波錯位參考導(dǎo)出、濾波宏塊級并行、多濾波并行等。
同時我們也有一套自適應(yīng)并行控制。很多時候并行并不是無損的,因此需要考慮怎么在提升速度的前提下,減少損失。比如當(dāng)知道線程數(shù)、設(shè)備核數(shù)、圖像寬高、圖像復(fù)雜度的情況下,就可以去自適應(yīng)調(diào)節(jié)WPP并行、CTU大小、GOP長度等等。
雖然我們已經(jīng)有了很完整的一套并行方案,但是在8K場景下又會出現(xiàn)很多新的問題:
第一個問題,首幀延時高,CPU使用率低。正常幀內(nèi)并行都是以WPP為主,但它會依賴它的左塊和右上塊,導(dǎo)致它們之間必須有錯位關(guān)系才能并行。也就是說,在左圖上最多并行的也只有4個塊。為了更好的計算并行度,我們總結(jié)出一個公式:w,h代表寬高CTU的個數(shù),但這只是最大并行度,因為WPP并度有個逐漸上升和逐漸下降的過程,所以這只是理想中最好的并行效果。
因此,為了減少首幀延時,就需要增加最大并行度,而TILE并行時,多個TILE間無依賴關(guān)系,因此TILE并行就是一個可行的方案。以4K為例,WPP最大并行度是16.2。因此只要TILE個數(shù)大于16個,理論上就會有速度收益。實際的計算結(jié)果驗證了這一點(diǎn),TILE劃分4×4已經(jīng)能夠提速2.2%,4×8能夠提速25.59%,運(yùn)行效果比WPP更好。
但如何減少或者避免過程中的性能損失呢?如果目標(biāo)是降低首幀延時的話,那么沒有必要對所有圖像進(jìn)行多TILE編碼,可以使用自適應(yīng)的方法。這里自適應(yīng)有2個方向,首先可以自適應(yīng)計算加多少TILE合適;其次可以自適應(yīng)只針對關(guān)鍵幀多TILE編碼,其他幀仍舊使用原先的編碼方式。這樣的組合能夠做到控制性能損失的前提下,有效地降低延遲。
第二個問題,在超多核設(shè)備上,8K視頻速度無法提升。通過整體分析對比發(fā)現(xiàn),預(yù)分析成為整個編碼過程的瓶頸,限制了編碼速度。這里有多種優(yōu)化手段,從輸入到預(yù)分析編碼都進(jìn)行了優(yōu)化。比如CUTREE并行優(yōu)化、多SLICE并行輸入、SLICE&BATCH并行優(yōu)化、多SLICE負(fù)載均衡,避免其由于負(fù)載不均衡導(dǎo)致延時過大的問題。多SLICE負(fù)載均衡是根據(jù)圖像劃分條帶,避免有些條帶比較大。但由于編碼過程中涉及復(fù)雜的內(nèi)容問題,我們會記錄實際運(yùn)用中每個條帶的時間,通過不斷調(diào)整最終達(dá)到比較優(yōu)的效果。
右圖是SLICE&BATCH并行。BATCH模式其實就是多幀并行,SLICE模式是幀內(nèi)條帶并行。我們發(fā)現(xiàn)在8K場景二者單獨(dú)的效果都不夠,二者結(jié)合才能達(dá)到比較好的效果,并行度提升得非常明顯。
在一系列加速措施之后,綜合效果能達(dá)到加速101%,壓縮性能損失0.1%,加速比1001:1。
3.2 算法優(yōu)化
8K場景下一些加速算法的優(yōu)化同樣會出現(xiàn)的新問題。比如,在8K中,變換過程占比更加突出,影響編碼速度。因此嘗試了使用非標(biāo)準(zhǔn)DCT來簡化DCT過程進(jìn)行加速。比如針對64x64的塊,只對前16行進(jìn)行DCT的列變換,轉(zhuǎn)置后,也僅針對16行再次進(jìn)行列變換,這樣就僅對較少的位置變換,其他位置用0填充。通過這樣的處理,能夠減少50%-60%DCT正變換的時間。由于DCT變換在8K場景中占比較大,所以這個節(jié)省的時間也是非常明顯的。
但實現(xiàn)時發(fā)現(xiàn),這個加速算法會對一些邊界清晰的塊造成比較大的性能損失,比如紋理比較復(fù)雜的圖像、字的邊緣、人的眼睛等。所以這里嘗試進(jìn)行了CTU級的場景檢測,使用預(yù)分析得到的圖像復(fù)雜度信息,檢測當(dāng)前塊是否屬于平滑塊,同時避免了額外的計算量。通過這種方式,就完成了只針對平滑塊的64x64/32x32TU采用非標(biāo)準(zhǔn)DCT變換。最終效果能夠加速6%,壓縮性能損失0.5%。
在低延時直播場景下,為了避免壓縮性能損失較大,也需要進(jìn)行優(yōu)化。上圖為低延時場景下常用的IPPP結(jié)構(gòu),分析這種結(jié)構(gòu)的性能時發(fā)現(xiàn),由于在低延時場景下單純使用前一幀作為參考,導(dǎo)致每一幀得到的QP偏移量是相似的,也就是說每一幀的重要性是相同的,屬于同一層,沒有做到分層狀態(tài)。所有幀都處在同一層很多時候?qū)幋a器來說是不好的,比如常用的分層結(jié)構(gòu),對于越低層的幀就會有越小的QP,這樣能夠更好地提高壓縮性能。
因此提出的優(yōu)化方案是,引入以4幀為一組的miniGOP結(jié)構(gòu),調(diào)整參考關(guān)系,針對這種低延遲miniGOP,優(yōu)化cutree傳播, 強(qiáng)化低level幀參考性,這樣便自然而然地進(jìn)行了分層,同時增強(qiáng)了整體的容錯能力。進(jìn)一步的,為了保證在lookahead長度較短時的,低層幀的性能, 通過調(diào)整輸出為單幀推入推出的結(jié)構(gòu),保證了低層幀推出時能最大限度利用后向的時域依賴性完成幀間的QP計算。利用結(jié)構(gòu)和算法的改動,讓QP在不同層進(jìn)行更好地分布,達(dá)到最終的優(yōu)化效果,在低延時直播場景下,性能提升十分明顯。
3.3 主觀優(yōu)化
為了進(jìn)一步提升在直播場景下的主觀質(zhì)量,我們加入了對ROI(關(guān)注區(qū)域)編碼的支持,以提高人眼關(guān)注區(qū)域的質(zhì)量。但同時ROI功能的添加也產(chǎn)生了2個問題:
問題1:碼率波動大。因為ROI調(diào)整了圖像的QP分布,使得實際碼率和目標(biāo)碼率相比產(chǎn)生了比較大的碼率波動。為了解決這個問題, 我們從幀內(nèi)和幀間兩方面進(jìn)行了優(yōu)化:首先,對于幀內(nèi),為了更好地找到ROI和ROU區(qū)域的QP偏移,通過對ROI和ROU區(qū)域的強(qiáng)度、面積及復(fù)雜度進(jìn)行函數(shù)擬合,調(diào)整了QP的計算公式:
QP_roi=QP?func1(QP_frame, roi_cplx?roi_area,rou_cplx?rou_area,roi_strengt?,rou_strengt?);
QP_rou=QP+func2(QP_frame, roi_cplx?roi_area,rou_cplx?rou_area,roi_strengt?,rou_strengt?)。
這里的復(fù)雜度延伸了編碼器本身對塊的復(fù)雜度評估,所以沒有額外的計算量。這時碼率波動由32%減小到15%。
其次,對于幀間,為了進(jìn)一步減少幀間圖像間的碼率波動,我們調(diào)整了碼率的蓄水池模型,使其能夠通過調(diào)整ROI強(qiáng)度,進(jìn)一步優(yōu)化碼率波動。當(dāng)碼率上升的時候,就增大ROU的強(qiáng)度,降低碼率;但當(dāng)碼率持續(xù)上升到一定閾值,就要減少ROI的強(qiáng)度,進(jìn)一步降低碼率, 反之亦然。通過這一系列手段,將碼率從15%降低到了5%,達(dá)到了我們碼率控制的預(yù)期。
問題2:速度下降明顯。我們同樣從兩方面進(jìn)行了優(yōu)化:首先是編碼劃分決策的快速算法優(yōu)化,因為關(guān)注區(qū)域更容易劃分小塊,而非關(guān)注區(qū)域更容易劃分大塊。既然已經(jīng)劃分出ROI和ROU,我們就可以根據(jù)不同區(qū)域,調(diào)整它的劃分決策算法。通過這樣的方式能夠在編碼方面提升速度。
同時我們也進(jìn)行了相應(yīng)的工程優(yōu)化,比如推理框架工程化加速、模型升級和剪枝、動態(tài)調(diào)節(jié)輸入圖像下采樣的算法和參數(shù)等等。
最終效果達(dá)到平均耗時僅增加5%,人工評測主觀畫質(zhì)提升32.3%,比較顯著地提升了主觀效果。
3.4 其它
前面僅是其中的一部分優(yōu)化,除此之外還有很多。
算法上:例如自適應(yīng)Intra跳過算法、預(yù)分析MVP跳過算法、預(yù)分析分像素ME跳過算法、預(yù)分析Intra 模式搜索優(yōu)化、Inter search模式跳過算法優(yōu)化、Intra 色度模式RD搜索優(yōu)化、Inter compound 模式跳過算法、參考幀選擇算法優(yōu)化、濾波分層跳過算法、基于參考塊信息的濾波快速算法等。
工程上:例如CTU編碼優(yōu)化、CTU參考模式信息拷貝優(yōu)化、Intra 參考像素拷貝優(yōu)化、Tile syntax 更新優(yōu)化、CTU殘差信息拷貝優(yōu)化、編碼信息統(tǒng)計優(yōu)化、Cost表計算優(yōu)化、擴(kuò)邊優(yōu)化、重建拷貝優(yōu)化等。
最后補(bǔ)充一點(diǎn),我們團(tuán)隊不僅有服務(wù)器端編碼能力,還通過騰訊云對外輸出R265終端直播的實時編碼能力,目前已經(jīng)在騰訊云終端上廣泛使用。其能夠支持在X86平臺和ARM平臺上實現(xiàn)更好的零延遲壓縮。R265在與X264@veryfast相似的速度下,可以節(jié)省30%的比特率。
我的分享到此結(jié)束。
LiveVideoStackCon是每個多媒體技術(shù)人的舞臺,如果您在團(tuán)隊、公司中獨(dú)當(dāng)一面,在某一領(lǐng)域或技術(shù)擁有多年實踐,并熱衷于技術(shù)交流,歡迎申請成為LiveVideoStackCon的出品人/講師。
掃描下方二維碼,可查看講師申請條件、講師福利等信息。提交頁面中的表單完成講師申請。大會組委會將盡快對您的信息進(jìn)行審核,并與符合條件的優(yōu)秀候選人進(jìn)行溝通。
掃描上方二維碼?
填寫講師申請表單