新聞中心

EEPW首頁 > 消費電子 > 業(yè)界動態(tài) > 騰訊多媒體實驗室:視頻編碼技術(shù)在多場景下的應(yīng)用實踐

騰訊多媒體實驗室:視頻編碼技術(shù)在多場景下的應(yīng)用實踐

作者: 時間:2020-09-24 來源:騰訊技術(shù)工程 收藏

大家好,首先感謝TLC大會組委會的邀請,有這個機會在這里跟大家一起交流分享。我先做個簡單的自我介紹。我叫王詩濤,目前就職于騰訊多媒體實驗室,我的主要研究方向是視頻編解碼和圖像壓縮。我是2013年入職騰訊,先后負(fù)責(zé) QQ視頻通話,騰訊云互動直播SDK,騰訊會議和云游戲等實時音視頻場景下的視頻技術(shù)開發(fā),同時我也負(fù)責(zé)圖片壓縮技術(shù)的研發(fā),主導(dǎo)開發(fā)了TPG圖片壓縮格式。

本文引用地址:http://www.butianyuan.cn/article/202009/418708.htm

今天我給大家分享的主要內(nèi)容分為三大部分,第一部分是騰訊會議的技術(shù)優(yōu)化介紹。第二部分是介紹我們將用于圖像壓縮的探索實踐。最后一部分會介紹我們近兩年在云游戲場景上面的一些技術(shù)的優(yōu)化。

1. 騰訊會議視頻編碼技術(shù)攻堅戰(zhàn)

首先我們來看我們在騰訊會議上做的一些視頻技術(shù)優(yōu)化,2020年,對大家來講是一個很不平凡的一年,這一年因為疫情的爆發(fā),改變了大家的工作和生活方式,也正是因為疫情讓騰訊會議這一款產(chǎn)品備受關(guān)注,成為了爆款。其實騰訊會議推出的時間并不長,我們是在2019年底的時候才發(fā)布這款產(chǎn)品,發(fā)布不到一個月,疫情就爆發(fā)了。我記得我們發(fā)布之初的DAU才幾千人,疫情爆發(fā)之后,不到兩個月的時間DAU就突破了1000萬。因為用戶的爆炸式增長導(dǎo)致我們的流量帶寬也呈現(xiàn)指數(shù)級增長,為了節(jié)省帶寬成本,我們在視頻編碼這一塊做了大量的優(yōu)化。

1.1 H.265編碼技術(shù)優(yōu)化

首先就是優(yōu)化H.265編碼技術(shù)。我們知道現(xiàn)在主流的視頻編碼格式是H.264和H.265, H.265比H.264的壓縮效率要高50%左右,但是它的編碼復(fù)雜度也會比H.264高很多。如果要在騰訊會議這種實時場景下應(yīng)用的話,肯定是要做大量的性能優(yōu)化的。我們對編碼算法的各個模塊,比如說塊劃分,幀內(nèi)幀間預(yù)測等都做了大量的算法優(yōu)化,包括模式選擇快速算法和提前退出算法,同時也做了很多工程類優(yōu)化。比如說優(yōu)化數(shù)據(jù)結(jié)構(gòu),減少內(nèi)存拷貝,匯編優(yōu)化以及多線程優(yōu)化等。經(jīng)過優(yōu)化之后,我們的編碼器相比于開源的X265,無論是在壓縮效率,還是在編碼速度方面都是有很大的優(yōu)勢的。我們的編碼速度比X265-Ultrafast還要快一倍以上,同時壓縮效率高30%以上。

1600904152566027.png

1.2 攝像頭視頻場景下的編碼優(yōu)化

除了編碼內(nèi)核優(yōu)化,我們也針對視頻會議這個場景做了很多專項優(yōu)化,第一個是ROI編碼,ROI編碼也叫感興趣區(qū)域編碼,對于會議里面的攝像頭視頻,大家可能更關(guān)注的是人臉區(qū)域,而對背景區(qū)域關(guān)注度較低。所以我們采用ROI編碼來提升人臉區(qū)域清晰度,提升主觀質(zhì)量。ROI編碼包含兩個模塊,一塊是人臉檢測,或者說膚色監(jiān)測,另外一塊是ROI編碼。對于人臉檢測模塊,我們采用了快速高效的檢測算法,每幀1080p圖像的檢測耗時可以控制在0.3ms以內(nèi),對整體編碼性能影響非常小。完成人臉檢測之后,我們會在編碼前對碼率控制進(jìn)行調(diào)整,對于ROI區(qū)域增加碼率,提升編碼質(zhì)量,對于非ROI區(qū)域則適當(dāng)降低碼率,以保持總體碼率的平衡。我們的ROI編碼效果是非常明顯的,在低碼率下可以明顯提升視頻主觀質(zhì)量,高碼率下可以節(jié)省20%以上碼率,同時保持主觀質(zhì)量基本不變。


除了通過ROI提升編碼效果,我們也在提升視頻網(wǎng)絡(luò)抗性方面做了很多工作。比如SVC編碼技術(shù)。通常視頻會議是多方接入的,參會人可能有三五人甚至更多,每個接入用戶的網(wǎng)絡(luò)狀態(tài)是不一樣的,有的用戶網(wǎng)絡(luò)好,有的網(wǎng)絡(luò)狀況很差,這就給編碼端帶來了難題,如果發(fā)送端為了確保網(wǎng)絡(luò)差的用戶能正常通信而發(fā)送一個低碼率視頻,就會影響到網(wǎng)絡(luò)好的用戶的視頻體驗,而如果為了保證網(wǎng)絡(luò)好用戶的視頻效果發(fā)送高清視頻的話,網(wǎng)絡(luò)差的用戶的視頻就會卡死。

1600904437672539.png

為了解決這個問題,我們在編碼端采用了SVC編碼技術(shù)。我們將編碼視頻分成三層,其中基本層只能參考基本層,增強層可以參考基本層也可以參考增強層,這樣的話,只要基本層不丟失,那所有的基本層的視頻幀都能正確解碼,不需要申請I幀。這樣做的好處是,對于網(wǎng)絡(luò)很差的用戶,我們只給他下發(fā)基本層碼流就可以了,保證他的基本通信,而對于網(wǎng)絡(luò)好的用戶,我們會下發(fā)所有層,確保用戶能夠享受到高清流暢的視頻體驗。SVC編碼技術(shù)很好的適配了各種網(wǎng)絡(luò)狀況的用戶,避免了一個接收端的網(wǎng)絡(luò)不好影響到其他接收端的視頻效果。

1.3 屏幕分享場景下的編碼優(yōu)化

前面介紹的是我們在攝像頭視頻這個場景上做的一些優(yōu)化,接下來我再介紹一下我們在屏幕分享這個場景上面的一些優(yōu)化。屏幕分享是視頻會議的一個主流場景,屏幕分享的內(nèi)容是計算機生成的屏幕圖像,屏幕圖像和我們用攝像頭采集的視頻,是有很大的不同的。比如說屏幕內(nèi)容圖像通常是沒有噪聲,色調(diào)比較離散,線條比較細(xì)膩,而傳統(tǒng)的攝像頭視頻是有噪聲,色調(diào)連續(xù)的,而且紋理通常比較復(fù)雜。

傳統(tǒng)的視頻編碼技術(shù)采用的預(yù)測+變換的混合編碼結(jié)構(gòu),它主要針對的是攝像頭視頻,而對于屏幕內(nèi)容,它的壓縮效率是不太高的,經(jīng)過變換編碼后,很多高頻分量會損失,導(dǎo)致細(xì)節(jié)丟失、為了提升屏幕內(nèi)容的編碼效率,HEVC在16年的時候?qū)iT推出了一個針對屏幕內(nèi)容編碼的檔次,叫HEVC-SCC。SCC極大的提升了屏幕分享這種場景下的編碼效率。

SCC里面有兩個關(guān)鍵技術(shù),一個是幀內(nèi)塊拷貝技術(shù),也叫IBC編碼,IBC編碼的時候,可以用當(dāng)前幀已經(jīng)重建好的塊作為參考塊,也就是基于當(dāng)前幀的運動補償。另一個技術(shù)是調(diào)色板編碼(Palette Mode)技術(shù),調(diào)色板編碼利用顏色表和顏色索引來完成每個像素的重建。IBC和Palette編碼對于屏幕內(nèi)容的壓縮效率的提升效果非常顯著,壓縮效率相比H.265可以提升50%以上。為了提升屏幕分享場景下的壓縮效率,我們在原有編碼器基礎(chǔ)上加入了這兩個工具集,推出了一個專用于屏幕內(nèi)容壓縮的TSE編碼器。

1600904458230414.png
1600904467744162.png

IBC和Palette編碼雖然壓縮效率很高,但是編碼復(fù)雜度也是挺高的,為了能在視頻會議這種實時場景應(yīng)用,我們對TSE編碼器做了大量的性能優(yōu)化工作,比如基于hash的運動估計,快速顏色表生成及查找算法,提前退出算法以及匯編優(yōu)化等。經(jīng)過優(yōu)化之后,我們的TSE編碼器的總體性能達(dá)到了業(yè)界領(lǐng)先的水平。我們這里有組對比數(shù)據(jù),編碼效率方面,我們的TSE編碼器比X265-Ultrafast高70%以上,編碼速度不到X265-Ultrafast的一半。除了客觀質(zhì)量方面的提升,TSE對主觀質(zhì)量的改善也是很明顯的,采用TSE編碼生成的圖像,文字效果要明顯好于X265的編碼效果,另外,TSE編碼輸出的圖像的線條也更加的清晰細(xì)膩。


1600904497893525.png

1600904697262090.png

1600904509578789.png

除了屏幕內(nèi)容編碼技術(shù),我們在屏幕內(nèi)容的編碼方面,還增加了YUV444編碼模式的支持。由于人眼對色度分量不太敏感,通常攝像頭視頻一般會在編碼前對色度分量進(jìn)行一個下采樣,編碼的時候采用YUV420格式,這樣可以節(jié)省帶寬,同時整體的主觀質(zhì)量影響不大。但是對于屏幕內(nèi)容序列,因為本身它的色彩是非常豐富的,如果我們對色度分量進(jìn)行下采樣的話,會嚴(yán)重影響圖像的重建效果。而且這種損失是不可逆的,它沒法通過后面的編解碼環(huán)節(jié)補償回來。為了解決色度下采樣帶來的顏色失真問題,我們支持了YUV444編碼模式,YUV444編碼由于沒有色度下采樣,它編碼之后的圖像視覺質(zhì)量和原圖非常接近。相比于YUV420編碼,主觀質(zhì)量有很大提升。

2. 視頻編碼在圖像壓縮領(lǐng)域的探索實踐

前面介紹了我們實驗室在視頻會議這個場景上面的一些視頻編碼技術(shù)的優(yōu)化,接下來第二部分我將介紹一下我們在圖片壓縮這一塊的一些探索實踐。

我們在前幾年的時候推出了一個名為TPG的圖片壓縮格式,它是一個基于avs2的圖片壓縮格式,我先簡單介紹一下我們TPG格式產(chǎn)生的背景。我們早在14年、15年的時候,就開始了圖片壓縮的優(yōu)化工作。當(dāng)時收到很多業(yè)務(wù)的反饋說圖片的流量帶寬成本比較大,看我們能不能幫忙節(jié)省圖片帶寬流量成本。當(dāng)時互聯(lián)網(wǎng)行業(yè)用的比較多的圖片格式是jpeg和webp,jpeg是一個很古老的格式,它的壓縮效率是比較低的,webp是谷歌在10年左右推出的一個基于VP8的圖片編碼格式。

我們當(dāng)時就想,VP8是和H264同一時代的標(biāo)準(zhǔn),既然可以用VP8來做圖像壓縮,那為什么不用最新的H.265編碼標(biāo)準(zhǔn)呢,為了驗證H.265方案的可行性,我們做了大量實驗,發(fā)現(xiàn)采用H.265進(jìn)行圖像壓縮,其壓縮效率要遠(yuǎn)遠(yuǎn)高于jpeg,也大幅領(lǐng)先于webp,也就是說采用H.265進(jìn)行圖片壓縮是完全可行的??紤]到H.265的專利風(fēng)險性,我們就采用了壓縮效率和H.265相當(dāng)?shù)腁VS2作為內(nèi)核,推出了TPG圖片壓縮格式。

我們的TPG圖片編碼系統(tǒng)包括RGB轉(zhuǎn)YUV模塊,編碼模塊,TPG格式封裝幾個模塊。為了支持一些圖片特有信息,我們的TPG加入了很多功能擴展。比如對Alpha通道的支持,傳統(tǒng)的視頻編碼是沒法編碼RGBA數(shù)據(jù)的,為了能夠加入Alpha通道信息,我們將RGBA數(shù)據(jù)分離成RGB數(shù)據(jù)和Alpha數(shù)據(jù),然后將兩個通道的數(shù)據(jù)分別進(jìn)行編碼,最后將編碼后的數(shù)據(jù)合成在一起輸出一個TPG碼流。還有就是對于動態(tài)圖片格式的支持,我們知道傳統(tǒng)的gif圖像編碼由于沒有利用圖像之間的相關(guān)性信息,它的壓縮效率是很低的,我們的TPG采用視頻編碼的模式對動圖進(jìn)行壓縮,在保持主觀質(zhì)量基本不變的情況下,編碼效率大大提升,同時,為了和gif保持特性一致,我們在TPG里面加入了顏色表、延遲時間等信息,確保TPG的圖片展示效果和gif完全一致。

1600904546927599.png

經(jīng)過不斷完善,TPG格式的功能不斷健全,壓縮效率優(yōu)勢明顯,根據(jù)我們的對比測試結(jié)果,在同等主觀質(zhì)量下,TPG的壓縮效率比jpeg高45%以上,比png高60%以上,比gif高85%以上。

我們除了優(yōu)化TPG編碼內(nèi)核提升壓縮效率,也實現(xiàn)了一整套TPG轉(zhuǎn)碼方案。在h5頁面接入方面,我們和公司內(nèi)的X5內(nèi)核團隊合作,推出了一個CDN+X5內(nèi)核的無痛接入方案,X5內(nèi)核里面原生支持我們的TPG格式,在請求圖片的時候,請求頭里面會帶上image/tpg標(biāo)識,只要業(yè)務(wù)是用的X5內(nèi)核,業(yè)務(wù)上層不需要做任何改造就可以輕松接入TPG圖片格式;在騰訊云開發(fā)接入方面,騰訊云數(shù)據(jù)萬象和微信小程序內(nèi)核已集成TPG的轉(zhuǎn)碼方案,接入云開發(fā)就直接使用TPG格式;除了H5接入和騰訊云開發(fā)的方案,我們也實現(xiàn)了終端native接入的方案,提供全平臺的TPG解碼器,業(yè)務(wù)只要集成了我們的解碼器,就可以解碼出RGB數(shù)據(jù),之后完成渲染。

在服務(wù)端,當(dāng)用戶請求圖片的時候,首先會判斷終端是否支持TPG,如果支持TPG的話,就看OC節(jié)點是否有TPG緩存,有緩存就下發(fā)TPG,否則回源查看是否有 TPG副本,如果有就緩存到OC節(jié)點下發(fā)TPG,否則啟動TPG的轉(zhuǎn)碼同時下發(fā)原圖。

前面介紹了我們TPG格式的一些特性以及轉(zhuǎn)碼方案,這里總結(jié)一下TPG的優(yōu)勢。首先它的壓縮效率高,相比jpeg,png和gif優(yōu)勢明顯;TPG有完整的解決方案,支持CDN+X5內(nèi)核的H5接入和終端native SDK接入,支持linux、windows,mac,ios,android全平臺,另外為了支持瀏覽器,我們也推出了TPG的js版解碼器;功能方面,TPG增加了對alpha通道和動畫的支持。

正是由于TPG有這么多的優(yōu)點,TPG格式推出后,在公司內(nèi)外得到了廣泛的應(yīng)用。目前公司內(nèi)已經(jīng)有超過60家業(yè)務(wù)接入了我們的TPG圖片格式。我們可以看下業(yè)務(wù)接入TPG格式后的效果對比。手Q H5頁面為例,采用tpg圖片格式后,手Q H5頁面的流量節(jié)省了50%以上,除了帶來流量的節(jié)省,TPG在體驗優(yōu)化這一塊的效果也是比較明顯的。這里有一組業(yè)務(wù)的頁面測試數(shù)據(jù),采用TPG格式后,頁面的總圖片大小,減少了近50%,同時頁面加載速度提升了近1/3。

1600904583811621.png

為了在行業(yè)內(nèi)進(jìn)一步推廣TPG格式,我們也做了TPG的標(biāo)準(zhǔn)化工作,我們在17年的時候向AVS組織提出了建立互聯(lián)網(wǎng)圖像標(biāo)準(zhǔn)的提案,并且成功將TPG納入AVS2的第7部分圖像容器,目前AVS2-P7已經(jīng)在國家標(biāo)準(zhǔn)的申報流程中,相信在不久的將來就會正式發(fā)布為國家標(biāo)準(zhǔn)。

3. 云游戲場景下編碼技術(shù)優(yōu)化

前面介紹的是我們在會議和圖片壓縮場景的一些技術(shù)優(yōu)化,最后一部分我會介紹一下我們在云游戲場景下的一些研究。

首先簡單介紹下什么是云游戲?云游戲是一種以云計算和串流技術(shù)為基礎(chǔ)的一個在線游戲技術(shù),它將游戲渲染放到了服務(wù)器端,而不是在用戶的終端設(shè)備上進(jìn)行本地渲染。云游戲把游戲玩家的操作指令直接發(fā)送到云端,由云端來完成圖像渲染,渲染后的圖像會被編碼成一個視頻流,然后把這個視頻流發(fā)到用戶的手機或者終端設(shè)備上面,完成解碼顯示。也就是在玩游戲的時候,其實你看到的是一個視頻,由于視頻編碼質(zhì)量高,延時小,所以效果和本地渲染看起來一樣。

1600904604400239.png

云游戲有什么好處呢?首先,云游戲即開即玩,不需要下載。以前我們玩一個游戲,比如lol或者王者榮耀,我們需要先去下載一個安裝包,而安裝包一般比較大,這樣既浪費用戶時間,也占用設(shè)備存儲空間。以前試玩一個游戲的成本比較高,現(xiàn)在的話,我可以隨時隨地打開就玩,輕松體驗各種游戲。

其次,本地游戲需要在本地渲染,對游戲玩家的硬件設(shè)備配置要求比較高,采用云游戲后,將渲染搬到云端,對用戶的終端設(shè)備的配置要求會大大的降低,以前為了玩一個重度游戲,需要去網(wǎng)吧,現(xiàn)在在家用一個普通筆記本,就可以在上面輕松的玩各種大型游戲。

還有一點,云游戲解決了跨平臺兼容的問題。現(xiàn)在MAC電腦的用戶越來越多,但是很多游戲是不支持MAC平臺的。云游戲采用的視頻流方案,解決了各平臺終端互通的問題,MAC,手機甚至TV都可以玩端游。

云游戲有這么多好處,為什么之前一直沒有發(fā)展起來呢?這里簡單介紹下云游戲發(fā)展歷史。云游戲的概念在2000年左右的時候就提出來了。2009年OnLine公司推出了第一款云游戲孤島危機,接下來的近10年的時間里面,云游戲發(fā)展比較緩慢。從2018年開始,云游戲進(jìn)入了快速發(fā)展時期,各大巨頭開始發(fā)力, Google微軟都推出了自己的云游戲,在騰訊內(nèi)部也有好幾個云游戲團隊,比如 start云游戲,GameMatrix,騰訊即玩,騰訊云也推出了云游戲解決方案。

1600904622919304.png

為什么近兩年云游戲發(fā)展突然加速了呢?我覺得主要有以下幾個方面的原因,一個是云計算的普及以及邊緣計算的發(fā)展,包括我們GPU虛擬化技術(shù)的成熟。另一個關(guān)鍵原因是隨著5G時代的到來,用戶的網(wǎng)絡(luò)帶寬越來越好,而且?guī)挸杀驹絹碓降?,可以很好的滿足云游戲?qū)τ诟邘挼囊?;還有就是我們的音視頻技術(shù)的不斷發(fā)展,現(xiàn)在硬件編解碼技術(shù)越來越成熟了,而且壓縮效率越來越高,為云游戲的發(fā)展提供了支撐。

云游戲它有幾大模塊,一塊是在云端,云端主要是負(fù)責(zé)渲染和編碼,第二大模塊網(wǎng)絡(luò)傳輸,然后再加上終端的解碼渲染過程,音視頻編解碼技術(shù)在云游戲里面是一個比較核心的模塊,云游戲的圖像壓縮質(zhì)量,帶寬成本,游戲時延等均和編解碼技術(shù)息息相關(guān),為了提升云游戲用戶體驗,我們聯(lián)合公司內(nèi)的云游戲團隊,一起針對云游戲場景做了大量視頻技術(shù)優(yōu)化,我們也自研了一套云游戲視頻引擎。

我們的云游戲引擎采用了全鏈路硬件的實現(xiàn)方案。在云端編碼這塊,我們采用H.265編碼來提升壓縮效率,支持DX紋理輸入,避免CPU和GPU之間大量的數(shù)據(jù)拷貝。為了節(jié)省流量帶寬,我們在編碼策略這一塊做了大量的優(yōu)化,比如說采用動態(tài)碼率,我們會在編碼前對視頻場景進(jìn)行預(yù)分析,如果當(dāng)前畫面屬于比較靜止的場景,我們會適當(dāng)降低它的碼率,因為靜止場景通常圖像的PSNR比較高,比如在45dB以上,對于這類圖像,即使降低部分碼率,人眼一般感覺不出來。

而對于復(fù)雜運動區(qū)域,則會適當(dāng)?shù)奶嵘a率,這樣可以改善大運動場景下畫面模糊的問題。采用動態(tài)碼率技術(shù),不但能夠節(jié)省碼率,視頻主觀質(zhì)量還能得到一定提升。除了動態(tài)碼率,我們還加入了一些視頻前處理技術(shù)比如視頻增強來提升主觀質(zhì)量。另外,我們也使用了ROI編碼技術(shù),可以在主觀質(zhì)量基本不變的情況下,節(jié)省10%左右的碼率。

1600904641480320.png

客戶端方面,我們windows、mac、ios、android全平臺支持了H.264、H.265 1080p@60fps硬件解碼,并針對各平臺的解碼性能做了大量優(yōu)化。比如針對Android硬件解碼兼容性差,延時大等問題,我們通過優(yōu)化解碼出幀機制,處理囤幀問題降低延時,針對不同芯片下發(fā)不同配置參數(shù),挖掘最大潛能,同時完善我們的硬件能力檢測機制,盡可能覆蓋更多機型。

同時,我們也做了解碼渲染一體化工作,避免GPU和CPU的數(shù)據(jù)拷貝,提升性能。另外,我們也加入了客戶端能力上報,異常監(jiān)測機制,云端和客戶端能力協(xié)商機制,根據(jù)客戶端反饋動態(tài)調(diào)整編碼策略。

1600904663113386.png

經(jīng)過優(yōu)化之后,我們的云游戲視頻引擎整體性能達(dá)到了業(yè)界領(lǐng)先水平。我們的采集+編碼整體耗時控制在5ms以內(nèi),客戶端的解碼+渲染的總耗時,windows平臺在5ms以內(nèi),MAC在8ms左右,Android手機的平均耗時在12ms左右,我們整體的端到端延時已經(jīng)做到了行業(yè)內(nèi)最低。

目前我們的云游戲視頻方案已經(jīng)在公司內(nèi)最大的云游戲平臺START全平臺上線,支持了PC,移動和TV端,目前可以做到玩云游戲與玩本地游戲在體驗上已經(jīng)沒有差別了。

以上就是我這次分享的主要內(nèi)容,謝謝大家!




關(guān)鍵詞: 視頻編碼

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉