视频通话 原理分析
2012年7月,微信4.2版本首次加入了視頻通話功能,如今已發展了5年,在面對億級微信用戶復雜多變的網絡和設備環境,微信多媒體團隊在每個技術細節上不斷地深耕細作,為微信用戶提供了高質量的視頻通話。
今年騰訊全球合作伙伴大會上發布的《2017微信數據報告》顯示,到2017年9月,微信日成功通話次數2.05億次,月人均通話時長 139分鐘,月人均通話次數19次。無論是通話次數還是通話時長都比去年增加了一倍多,這個增長速度遠遠高于微信用戶量的增長,這與微信多媒體團隊在音視頻技術上的努力是分不開的。
本文將為大家介紹微信視頻通話在不同發展階段的各個關鍵視頻技術環節采用的方案,同時分享在視頻通話中的視頻編碼器研發的方法和經驗。全文來自微信視頻技術負責人谷沉沉在2017北京ArchSummit全球架構師峰會上的演講內容。
1 互聯網視頻通話的特點
1.1 互聯網視頻應用的目標
與很多互聯網視頻應用類似,互聯網視頻通話的應用目標也是希望用盡可能低的成本使視頻更加清晰與流暢。上圖右邊互聯網視頻應用的代價成本包含兩個維度:一是帶寬成本,包括客戶端用戶的流量成本,以及服務器端帶寬成本;二是計算資源開銷,表現在服務器端的設備投入量,以及客戶端的CPU占用、耗電量等,而對于性能較差的客戶端設備,控制客戶端的計算資源還可以保障這些設備也能支持基礎質量的視頻通話。
1.2 視頻通話的技術挑戰
上圖中谷沉沉列舉了四類互聯網視頻應用,其中視頻通話應用相對于短視頻分享、流媒體直播和媒體存儲來說有三個特殊的挑戰:
第一,由于微信視頻通話集中在移動端,這就要求系統的計算復雜度盡可能低;
第二,由于視頻通話是高度實時的應用,決定了視頻數據一般采用不可靠傳輸,這就要求視頻傳輸具有一定的魯棒性,比如抗丟包的特性,另外,由于沒有緩沖機制,視頻發送碼率要盡可能平穩;
第三,由于很多用戶在3G、4G等移動網絡下使用,對流量比較敏感,所以視頻通話帶寬占用要盡可能低。
最左邊三點是微信視頻通話作為海量級用戶產品具有的特殊難點:用戶的網絡狀況和設備性能差異巨大,所以微信視頻通話要適應不同的網絡和設備;由于用戶版本更新存在一定的周期,這就需要考慮新技術對舊版本的兼容性;另外,海量并發用戶對服務器端造成的帶寬成本壓力也是必須要考慮的。
所以,互聯網視頻通話是各種互聯網視頻應用中約束條件最多、最苛刻,也是實現難度較大的一種互聯網視頻應用。
2 微信視頻通話基本技術框架
據谷沉沉透露,現在微信視頻通話是基于微信多媒體團隊自研的多媒體應用綜合引擎——WAVE (Wechat Audio&Video Engine)。該引擎的底層——內核層是由傳輸、視頻、音頻三大類跨平臺技術構成的。在此之上,針對不同應用類型的特點做了一些接口封裝和應用邏輯設計,形成應用層,目前支持三類不同的應用:第一類是實時通話應用,目前用于微信的點對點和多人視頻通話。第二類是多格式的圖片處理,主要用在微信朋友圈、公眾平臺以及表情等圖片的壓縮和處理上。第三類是音視頻文件壓縮,應用于朋友圈視頻、語音和視頻消息的壓縮和處理等。
經過多年的技術積累,WAVE引擎支持了每天數億的視頻通話、數十億的視頻播放、數千億的圖片查看,所以整個引擎在壓縮效率、計算速度、音視頻質量等方面的性能都經過了微信億萬用戶的考驗,是業界比較領先的多媒體引擎。
谷沉沉表示他們團隊現在還在不斷提高引擎的處理速度、壓縮效率等性能,希望能用最合理的成本為廣大用戶提供最好的多媒體體驗。
下圖是基于WAVE引擎的微信視頻通話系統,包含視頻、音頻、傳輸三大類技術,分布在設備層、引擎層、服務器端三個層面。標紅的部分是視頻引擎涉及的技術。
下圖是WAVE微信視頻引擎的框圖,在發送端,攝像頭采集的原始視頻數據,一路直接在本地小窗口渲染,另一路先經過視頻前處理,再進行視頻編碼,之后對編碼生成的碼流進行容錯保護,最后發送到網絡上。相應地,在接收端,對收到的碼流先進行錯誤恢復,對正確恢復的數據進行視頻解碼,而后通過后處理增強提升視頻質量,最后經過播放控制流暢地顯示在接收端屏幕主窗口上。
其中QoS的反饋模塊會收集接收視頻的質量、網絡狀況等信息,通過服務器處理反饋到發送端,發送端再根據這些信息選擇合適的視頻編碼的參數,這樣就能實時適應不同的網絡狀況。目前,很多網絡適配算法都是在QoS服務器上執行的,這樣,如果新算法發布后發現問題,不用等到下一個客戶端版本的發布,就可以快速地在服務器端進行修改控制,加快算法的迭代進度。
3 視頻引擎的關鍵技術
上圖列出了視頻引擎中最關鍵的六大模塊的技術,其中最核心的是決定整個引擎基礎性能的視頻編解碼模塊,與之密切相關的有前后處理、容錯保護、網絡適配模塊,還有設備層的采集與顯示,以及對海量用戶通話情況的評價和運營體系,這六個模塊技術協同配合,任何一個模塊的短板都會影響整體視頻通話質量。
在微信視頻通話版本發展的不同時期,這些技術模塊的發展也是各有側重,整體上大致經歷了三個階段:
第一階段是基礎框架的搭建和性能優化,2010-2012年,第一個微信視頻通話發布前后的這段時間,當時大部分主流移動設備CPU主頻只有單核1GHz,為了在這樣的設備上能流暢運行視頻通話,微信多媒體團隊在視頻編解碼速度優化上下了很大的功夫,當時優化后的編解碼速度在同等壓縮效率下已經達到了業界領先水平;在采集顯示環節也采用了快速、高質量的方案,并做了大量代碼流程優化以提高處理速度,如減少內存的拷貝,優化格式轉換流程等;由于當時客戶端計算能力是整個視頻通話的瓶頸,視頻幀率、碼率較低,發送數據量對于大部分網絡不會造成太大壓力,所以第一階段的容錯保護策略非常簡單,只對關鍵幀做保護。經過這些基礎性能的優化,第一個微信視頻通話版本跟業界同類產品相比,同等帶寬下的視頻清晰度和流暢度都是非常不錯的。
第二階段是隨著移動設備硬件性能的逐漸提升,一些性能較好的移動設備可以支持更高幀率的視頻通話,發送碼率也隨之增大,于是網絡適配策略就成為這一階段的研發重點,由于實驗模擬網絡環境與海量用戶真實的網絡環境總是存在差異,所以很多網絡適配算法在經過模擬環境下的驗證后,還必須進行線上灰度測試,通常會隨機抽取大量樣本做算法的對照實驗,如果在大規模樣本上新算法的各項技術指標均優于現網算法,才會逐步放開到所有的通話。在這個灰度測試過程中,海量用戶通話質量的評價運營體系也逐步建立和完善。
第三階段是在近兩年,移動設備性能大幅度地提升,很多4核8核手機的性能甚至比早些年的PC機都要好,設備的計算性能已經可以支撐更高復雜度的計算,因此微信多媒體團隊開始研發視頻前后處理技術以提高主觀質量,同時在視頻編解碼上也加入了一些高復雜度、高壓縮效率的算法,使視頻通話在同等帶寬下可以達到更高的視頻質量。
由于演講時間所限,谷沉沉對選擇其中視頻編解碼、前后處理和容錯保護三個模塊進行了重點技術分析:
3.1 視頻編解碼
3.1.1 視頻編解碼的性能指標
在互聯網視頻應用中,視頻編解碼的核心指標概括起來一般有三個:編碼效率、編解碼速度和傳輸適應性,而這些指標之間是相互制約的,編碼效率的提升往往是以犧牲編碼速度為代價,傳輸適應性也會影響編碼效率,比如容錯保護時增加冗余會導致編碼效率下降。所以一個好的視頻編解碼器需要在這些指標之間找到合理的平衡點。
這三個指標在視頻通話中具體需要關注哪些方面呢?
首先,在編碼效率上:
1)微信視頻通話的場景非常多樣,除了類似傳統視頻會議那樣整體內容比較靜止的場景外,還有很多運動劇烈的場景。可能很多人認為微信視頻聊天通常都是手持手機攝像頭對著人臉,應該都屬于比較靜止的視頻場景,但在攝像頭距離人臉較近時,人臉在視頻畫面中占據了較大部分,這樣人臉的一點輕微運動對于整個視頻來說已經是屬于運動比較劇烈的內容場景,同時手持設備不穩定時還會造成視頻畫面的抖動,使運動更加復雜,因此微信視頻通話中的編碼算法必須適應多種不同的場景。
2)歷史版本互通兼容性,新的編碼技術必須要考慮舊版本的解碼兼容性,所以一旦編解碼格式確定就不能頻繁更新,只有當技術積累到一定程度,壓縮效率有突破性的提升,才會考慮升級替換。
3)主觀質量是“王道”,對互聯網應用來說,普通用戶不會關注PSNR等客觀質量指標,只會用眼睛來看,所以任何的客觀數據都只是技術上一種便捷的衡量方式,最終的衡量標準還是人眼的主觀感受。
其次,在編解碼速度方面,編解碼算法復雜度和實現優化程度都是影響編碼速度的重要因素。實現優化包括軟件的快速算法和代碼級優化,也包括硬件加速。隨著一代又一代的視頻編碼標準的發展,編碼效率的提升往往伴隨著算法復雜度的增加,CPU難以支撐高復雜度的軟件編解碼計算,如果硬件視頻編解碼各方面性能可以滿足視頻通話的需求,利用硬件來加速視頻編解碼就可以極大地緩解CPU計算資源壓力。此外,還要考慮幀級復雜度的均勻性,因為視頻通話能支持的最高幀率是由序列中編碼最慢的幀的時間消耗決定的。
第三,在傳輸適應性上,要求視頻碼流的碼率盡可能平穩,更嚴格地,還要控制幀級瞬時數據量沖擊,以減少瞬時數據量沖擊造成網絡擁塞而出現丟包、延時等問題。此外,視頻碼流還需要具有一定的抗丟包能力。
3.1.2 如何打造一個優秀可靠的視頻Codec?
谷沉沉根據多年的工作經驗,總結了打造一個優秀可靠的互聯網視頻應用軟件Codec的四個階段,針對其中第三、第四階段的優化,谷沉沉還舉了兩個微信多媒體團隊實戰優化過程中的案例進行了具體說明:
第一階段是格式的確立,主要是根據應用的計算復雜度要求選擇合適的編碼標準格式,或者開發私有格式,這一階段主要考慮編碼效率,評價方式類似標準組織的通用測試條件。
第二階段是實現優化,主要是通過代碼優化和快速算法優化等提高編解碼速度,同時控制編碼效率損失,在滿足應用要求的條件下,達到編碼效率和編解碼速度的合理平衡。
第三階段是應用定制,針對特定的應用場景需求做一些定制的研發,達到合入產品預發布的要求。比如微信視頻通話中的碼率平穩性要求,以及編碼參數切換支持等,都是在這個階段通過碼率控制算法優化來實現的。
案例分享:碼率控制優化
碼率控制的難點是平衡碼率平穩性和壓縮效率、質量平穩性。雖然學術上有很多碼率控制的研究,但實際工程應用中還是有很多問題需要考慮,如碼率控制的時間單位,極低幀率、極小I幀間隔下的碼率控制,單幀瞬時沖擊等。
上圖的第一張設置目標碼率360kbps的每秒數據量波動圖中,紫色線是微信自研視頻編解碼器的碼率波動情況,可以看出每秒的碼率基本都穩定在360kb左右,而藍色線表示的同等編碼效率下x264碼率波動情況,在一些運動比較劇烈的場景,碼率會上升到420kb,明顯高于目標碼率,這對我們實時視頻通話應用就會有很大的沖擊。
雖然第一張圖中微信自研視頻編解碼器的每秒數據量波動已經非常平穩了,但第二張圖中紅色線表示的半秒數據量波動曲線還是呈鋸齒狀,這在傳輸中依然會對網絡產生一定的沖擊,為了進一步提升碼率平穩性,微信多媒體團隊又進行了第二輪更加嚴格的碼率控制優化,可以看出綠線所示的現網微信視頻通話版本半秒數據量波動明顯比第二輪優化前的紅線平穩。
第四個階段是打磨穩定,雖然前面每個階段都會對編解碼器進行編解碼匹配、編解碼各項指標性能等編解碼器離線測試驗證,但在合入產品應用后,尤其是在海量用戶實際應用環境中,還是會出現一些編解碼器離線測試時發現不了的問題,如主觀質量的缺陷問題,需要逐一分析盡可能優化主觀質量,以及當解碼器接收到不能正常解碼的“臟”數據時,需要加強解碼器的魯棒性保護,及時終止解碼防止crash等。
案例分享:減輕塊效應
這里谷沉沉分享了在微信視頻通話研發過程中減輕塊效應的兩個優化方向:
一個優化方向是碼率分配微調。包含幀級和幀內兩個方面:幀級碼率分配微調是針對碼率平穩性優化造成運動劇烈場景下視頻質量損傷明顯的問題。因此在完成碼率控制算法之后需要根據主觀質量情況對碼率分配做一些微調,適當增加運動劇烈場景下碼率分配以提高質量;幀內率分配微調是指,由于人眼對平坦區域更加敏感,所以也會多為平坦區域多分配一些碼率。在上面這個視頻中,左面是優化之前,右面是優化之后,在運動劇烈場景中,如揮手的時候,手的部位較平坦區域塊效應明顯減輕。
另一個優化方向是編碼模式的微調。這里谷沉沉又舉了兩個例子:
一是關于skip模式的判定,上圖左下角解碼視頻截圖中臉部標紅圈的地方出現比較明顯的塊效應問題,經過分析發現這個視頻中相鄰的這兩幀在這個位置上內容相似,編碼過程中基于率失真最優原則的模式選擇結果是采用skip模式編碼,簡單說就是直接拷貝前一幀中相應的像素塊,雖然在客觀編碼效率上是當前塊最優的編碼模式,但主觀質量上塊效應比較明顯,微信多媒體團隊對skip模式的判斷條件做了一些微調,將這種情況改用inter模式編碼,多留一些殘差信息,雖然這個位置“花費”的比特數比skip模式多一點,但失真度也會低一些,圖中右面經過調整之后這個位置基本看不出塊效應。
另一種編碼模式的微調是intra和inter模式的選擇,當intra和inter模式編碼的率失真代價比較接近,采用哪種模式編碼對客觀編碼效率影響很小。但是在主觀質量上,有時候inter模式的殘差較小,量化之后一部分小系數的丟失也容易造成塊效應,這個時候針對這些場景利用一些輔助的統計信息,將這種場景判定為intra模式編碼就能解決這類塊效應問題。
3.2 前后處理
前后處理的增強效果毋庸置疑,但在很多場景下“副作用”也比較大,比如去噪容易造成細節模糊甚至缺失,銳化可能帶來鋸齒效應……因此研究前后處理算法的關鍵是要消除“副作用”,微信多媒體團隊就是按照“寧缺毋濫”的原則,即每次前后處理算法的更新可以只對部分場景增強,增強的幅度也可以較小,但必須保證不會出現質量變差的場景。在算法研究階段需要設計好場景自適應策略,對于算法無法完全解決的情況,再輔以運營策略,比如“白名單、黑名單”機制,對特定型號設備開啟或關閉相應的算法等。
案例分享:光照增強
光照增強問題的發現來源于微信多媒體團隊的一次視頻通話測試體驗,在晚上室內日光燈環境下,不同手機攝像頭采集的視頻質量差異較大,有些手機的采集視頻與真實環境光照基本一致,而有些手機采集的視頻就偏暗,甚至連人臉都無法看清。針對這種情況,微信多媒體團隊自主研究了一種低照度視頻增強方法,先通過對單幀平均亮度和最大、最小亮度等信息的分析和統計,推導出單幀的亮度增強和對比度增強的自適應約束;為避免視頻連續播放出現亮度閃爍,算法還考慮了前后幀亮度變化的一致性約束;最后對三個方面的約束做聯合優化求解,由于優化項中只包含二次項,再進行快速算法實現優化,求解過程計算復雜度較低,因此整個光照增強技術可以在視頻通話中實時處理。
上圖左上角子圖(a)為低光照的輸入源視頻截圖,(f)為微信自研光照增強算法處理后的視頻截圖,增強后可見臉部更多細節和背景環境的紋理,而從其余幾個現有視頻圖像增強對照算法處理后的截圖中,可以看出存在不同程度的顏色異?;蛟鰪娦Ч幻黠@等問題。
這項實用的研究成果在應用于微信視頻通話有效提升視頻質量的同時,也得到了學術界的高度認可。該算法相關的論文已發表在國際視頻領域知名會議ISCAS2017上,并受邀在大會上宣講,也是該次會議上僅有5%來自工業界的論文之一。感興趣的讀者可參考《Low-Lighting Video Enhancement Using Constrained Spatial-Temporal Model for Real-Time Mobile Communication》, IEEE ISCAS, pp:595-598, 2017
3.3 容錯保護
容錯保護往往通過增加冗余來實現,而視頻編碼又是通過降低冗余來提高壓縮效率,所以容錯保護的關鍵是要做到壓縮效率和容錯能力的平衡。主要有信源容錯和信道容錯兩類方法:
信源容錯可以通過改變參考關系來提高在丟包環境下的視頻解碼正確率,如上圖中IPPP參考幀結構,若P4幀丟失了,其后從P5開始的所有幀都無法正常解碼,在視頻通話中就表現為卡住。但如果改變參考關系,使P5參考P3,這樣,P4的丟失就不影響P5及其后續幀的正常解碼。但由于此時P5的參考幀距離變大,可能造成P5的幀間預測準確性下降,導致P5編碼數據量增大,壓縮效率降低,這就是這種容錯方式所帶來的時域冗余代價。因此需要在容錯能力和冗余代價上取得較好的平衡,在應用中也可以根據網絡狀況選擇合適的容錯能力。
在信道容錯方面,有分組異或、RS編碼等FEC前向糾錯技術??梢愿鶕恳粠闹匾缘燃壴黾硬煌娜哂啾Wo,上圖中紅色越深的幀表示重要性越高,它的丟失會造成更多幀解碼失敗,可以對這些越重要的幀增加越多的冗余保護。另外,對低延時網絡,如果遇到丟包導致解碼失敗,可以向發送端主動請求編碼I幀,避免長時間的卡頓。
4 未來之路
談到未來,谷沉沉表示互聯網時代業務和技術日新月異,在不太遠的未來幾年內,視頻技術的發展方向大致有三類:
1)基礎技術的突破,如H.266、AVS3、AV1等下一代標準,以及最近的熱點研究方向——基于深度學習的視頻圖像壓縮,壓縮效率將進一步提高。
2)現有視頻產品的體驗提升,繼續向著高質量、低帶寬/存儲空間、低功耗的方向發展。
3)新的產品形態不斷出現,比如3D、VR甚至光場等沉浸式的視頻通話。
未來,微信多媒體團隊將繼續堅持以專業、專注的精神,研發實用的多媒體技術,也歡迎對視頻圖像技術感興趣的優秀人才加入或開展技術研究合作,一起來不斷提升數億用戶的微信視頻通話等各類視頻圖像相關業務體驗!
演講嘉賓簡介
谷沉沉,騰訊專家研究員 & 微信視頻技術負責人。2007 年碩士畢業于哈爾濱工業大學,在校課題研究期間參與過 AVS、H.264SVC 等視頻編解碼標準技術研究,加入騰訊后也一直從事視頻圖像相關的技術研發工作,先后主導過 QQ、微信、手機 QQ 視頻通話、騰訊視頻等產品的視頻技術研發,目前主要負責微信視頻通話、朋友圈視頻圖片等業務相關的視頻圖像技術研發和團隊技術管理。擁有豐富的視頻技術研究與應用實戰經驗,在國際視頻領域知名學術會議刊物上發表多篇論文,數十項視頻技術領域的發明專利在國內外獲得授權,其中兩件獨立發明的專利榮獲中國專利獎。
總結
- 上一篇: 激活函数之 Sigmoid、tanh、R
- 下一篇: 如何抓取html请求,网页抓取工具如何进