本文來自阿里巴巴淘系技術部 高級算法專家王立波在LiveVideoStackCon 2020線上峯會的分享,從直播背景、直播痛點分析、窄帶高清、雲視頻技術趨勢幾方面詳細介紹瞭如何在確保用戶體驗QOS不變的前提下,實現淘寶直播的技術架構升級和成本大幅縮減。
文 / 王立波前端
整理 / LiveVideoStackweb
本次分享內容主要分爲五個部分,首先是全民直播大時代的背景介紹,第二是直播痛點分析,第三是淘寶直播窄帶高清技術,第四是音視頻技術趨勢探討,最後是在線互動。算法
在疫情的影響下,直播從傳統的秀場應用逐漸滲透到行業的各個領域。包括在線課堂,旅遊,政企,房車銷售等等,能夠說是全民直播時代已經到來。後端
在這樣的一個大背景下,過去一年淘寶直播得以快速發展。2019年,淘寶直播擁有了4億+的年度用戶規模,有100萬+年度主播入駐,2000億+年度直播成交以及4000萬+直播商品。春節期間,釘釘在線課堂更是有350萬+的教師主播,爲1.2億+中小學生提供了在線課程服務。緩存
在這麼大的一個業務體量下,咱們將會面對很是多的難點與挑戰。總的來講,包含如下三個部分,首先是成本,包括帶寬、存儲和轉碼三個方面。其次是用戶體驗,例如畫質,音質,秒開、卡頓和延時。最後是效率方面,例如開播的效率、審覈的效率和理解分發的效率。接下來咱們就來看一下淘寶在成本和體驗優化方面作了哪些工做。服務器
3.1 淘寶直播窄帶高清網絡
淘寶直播有三大核心技術,第一大核心技術是端上窄帶高清。咱們採用HEVC編碼實現了720p,25fps,800kbps的壓縮,而且PSNR> 43db/VMAF>90。端上窄帶高清技術主要應用有三個方面:第一是音視頻加強,採用基於AI的圖像加強、美顏和語音加強來提升生產質量。第二是感知處理,採用信源信道聯合自適應編碼。第三是S265編碼器,S265編碼器是業界領先的HEVC編碼器。架構
第二大核心技術是零轉碼系統,咱們實現了端到端原始流生產的和播放,成功的解決了兩個核心的痛點問題:不一樣網絡速度的兼容和不一樣播放設備的兼容,後者主要經過高性能解碼器實現iOS,Android和H5三端的100%解碼。框架
第三大核心技術是低延時技術,咱們實現了端到端秒級延時。主要依靠兩個技術,一個是基於RTC的實時直播系統,第二個是S265低延時編碼技術。iphone
3.2 淘寶直播系統架構
如圖所示淘寶直播的系統架構,從生產側來看,有采集、加強、感知處理、S265編碼四個環節。雲端咱們有邊緣的接入,有中心接入、切片錄製和CDN分發以及邊緣分發。在播放端有擁塞控制、解碼、渲染和顯示。除此以外,在雲端還有內容審覈,質量監控,內容理解和智能分發。
3.3 端上窄帶高清
生產側的第一個環節是圖像加強,爲了提高主觀質量,咱們引入了圖像加強技術,對編碼前的視頻作去噪、去抖、紋理加強以及美顏、美型的功能。除此之外,在後處理部分,咱們還引入了適時超分和HDR技術來提升觀看質量。在美顏、美型以及圖像處理等方面,咱們引入了GPU的技術,包括內存帶寬優化、shader優化、Pipeline優化等等以減小GPU的開銷。
針對音質的優化,咱們採用了智能降噪技術。不管是在STO仍是PESQ的指標上都顯著高於傳統WebRTC算法,在性能和包大小方面也均可以實現普通設備的覆蓋。下面播放的三段音頻,分別是原始音頻、RTC降噪和阿里降噪音頻。原始音頻咱們能夠明顯聽到馬路上車呼嘯而過的聲音很是強烈。RTC降噪音頻中降噪產生了必定的效果,可是汽車飛馳而過的呼嘯聲仍是很是明顯。而在阿里降噪音頻中,咱們能夠聽到汽車呼嘯而過的聲音已經基本消失。
生產的第二個環節是感知處理。咱們採用信源信道聯合自適應編碼技術。感知處理分爲5個方面,首先是ROI區域的感知,咱們基於PixelAI人臉檢測加商品檢測,對ROI區域進行提取和重點編碼。第二是場景的感知,不一樣的場景適合不一樣的編碼參數,咱們經過對場景進行分類,對於不一樣的場景賦予不一樣的編碼參數來提升壓縮質量。第三個是智能碼控CARC,咱們採用機器學習的碼率控制,對簡單場景賦予較低的碼率,對複雜的場景賦予較高的碼率來實現對帶寬的節省。第四個是網絡帶寬的感知,在網絡比較好的時候,咱們會採用比較高的碼率來實現畫質的提高,在網絡不太好的時候,會下降碼率,避免發生帶寬擁塞,因爲cdn採用峯值收費,峯谷時間段還能夠採用不一樣碼率策略。最後是設備算力的感知,不一樣的設備擁有不一樣的算力,咱們能夠實時檢測設備的算力狀況及時調整編碼的檔次,以此來實現對算力和質量的平衡。
生產的第三個環節是編碼,這又要講到咱們核心的S265編碼器,得益於S265編碼器的編碼壓縮技術,咱們實現了淘寶直播的720p、800kbs、25fps編碼,相比於業界常見的720p 1600kbps 節省了50%的帶寬。釘釘的在線課堂咱們更是把碼率壓縮到了200kbs,並實現了43db以上的質量。S265是淘寶和阿里雲共同發起的HEVC編碼器,目前已經實現集團內部的開源,並落地在點播、直播會議等各個場景中。相比起業界優秀的HEVC編碼器,S265在PSNR指標上有比較大的優點。首先在編碼工具提高方面,咱們作了大量工做,實現了HierarchyB、GPB、Bi-Search、Longterm、RDOQ、AdaptGOP等編碼工具,而且對這些工具進行了大量的算法和速度優化。咱們還設計了50多種快速算法,好比說Deblock的優化,編碼速度對比X265有1倍以上的提速。在工程上的優化,咱們作了浮點轉定點、位寬的縮減、SIMD的優化、冗餘去除、訪存效率提高及循環展開等等來提高咱們的編碼速度。在框架方面,咱們還作了線程調度優化等等。在碼率控制方面,咱們對幀級別碼控和塊級別碼控分別進行了優化,而且對2pass編碼進行了原創性的優化來提升2pass編碼的質量。在塊級別碼控中,咱們設計了新的CUTree和AQ算法。
下面來看一下S265的幾個典型優化,首先是CU劃分決策,咱們把CU劃分決策模塊分紅兩個步驟,一是紋理強度決策,經過計算CU的紋理梯度來判別平坦塊和複雜塊,若是是平坦塊就直接退出,若是是複雜塊就繼續向下劃分。第一步能夠解決大部分塊劃分的決策問題,可是對於模棱兩可的塊,則須要依靠CNN模型來輔助劃分。咱們使用了一個5層網絡的小模型把決策的準確度從72%提高到了96%;這個成果咱們跟清華大學劉老師合做發表了一篇論文,在DCC會議上展現。
第二個方面的優化是運動搜索方面的優化。運動搜索是從參考幀尋找最佳匹配塊的過程,包含整像素搜索和分像素搜索,分像素須要作7抽頭或8抽頭插值濾波,計算量大;整像素搜索已經有比較多的快速算法,好比菱形搜索、六邊形搜索及分層搜索,但分像素搜索一直沒有什麼好的方法。好比在圖中矩形的整像素周圍,分佈着60個分像素點,若是要對分像素點進行所有搜索的話,須要60次,通過優化以後通常須要搜4個、8個或16個點,但搜索次數仍是比較多的。咱們採用一個二元二次偏差平面方程,用9個整像素點的預測偏差來求解方程的5個係數,再對方程求偏導,可獲得最佳分像素點的位置。只需對這個最佳分像素點計算1個1/4差值,就能夠完成咱們的搜索過程。這個技術在編碼器的整個提速有12%,但bd-PSNR只有-0.016db。這些成果在VCIP 2016上能夠看到。
第三個是咱們的碼率控制。ABR是較適合直播的一種碼率控制方法。但HM中基於−模型的碼率控制方法沒有考慮圖像塊與塊之間的參考強度,有些塊會被後續幀參考有些不會,應該根據一個塊被參考的強度來決定它的量化係數。x265,x264中引入了MB-Tree技術,可是因爲幀的QP定製不合理,編碼效率不高且碼控準確度比較差,咱們測過平均只有90%左右。咱們根據「每1個bit被分配到任何一個CU,產生的邊際價值都相同」這樣一個原則,對MB-Tree方法進行了理論創新,使得編碼精度提高到了97%,且編碼質量提高了0.65db,對應17%的碼率節省。這裏有包含三個技術,第1個,I幀的QP推導,x265使用了一個經驗值,沒有考慮到視頻自己的特性,這樣作很不合理,咱們用預分析中低分辨率圖像的複雜度和目標碼率,通過屢次迭代搜索獲得準確的QP;第2個,隨着時間的推移,歷史幀的復權重愈來愈高,新產生的幀權重愈來愈低,致使其不能很快的響應複雜度的變化,咱們根據新產生的幀的參考強度計算出一個 QP,跟原來的QP作加權獲得真正的QP,能夠及時的反應新產生幀及其後續幀的複雜度;第3個,x265採用基於Viterb的P幀決策方法,每一個幀都須要跟歷史幀比較,複雜度很高,並在判決P幀時沒有考慮QP的影響,準確率也不高。咱們的算法只須要計算相鄰幀的變化率,並引入QP來做爲判決閾值,大幅下降了計算複雜度並提升了準確度。這個成果咱們與清華大學劉老師合做發表在TIP 2019 05月期刊上。
第四點咱們來看一下S265智能碼控技術(CARC)。ABR追求碼率控制的精準度,可是它忽略了場景的平均複雜度。若是設定一個統一的碼率目標,簡單的場景會出現碼率過剩,複雜場景會出現碼率不足。另外一個方面,人眼對失真的敏感度存在衰減效應,高於必定閾值敏感度降低,此時存在碼率過剩。咱們採用一個CNN模型對場景進行分類,計算出場景的複雜度因子,根據複雜度因子調節編碼碼率,可消除簡單場景下的碼率過剩( > 42db),並提升複雜場景的質量。平均下來,咱們能夠節省15-30%的碼率,以釘釘在線課堂爲例,大部分時間畫面是靜止或慢速運動的,少數時間會播放教學影片,CARC能夠保證播放影片時的質量,同時在靜止場景節省大量碼字,通過後臺統計,釘釘在線課堂720p碼率在200kps,且PSNR保持在43db以上。
最後,咱們還有一個畫質評價環節。業界常見的客觀評價指標有PSNR,SSIM,VMAF,但這些指標只適合於有源場景;但淘寶內容存在大量的無源場景,好比商家上傳的視頻,手機硬編碼的直播視頻,這樣的視頻,都沒有參考對象。針對這種場景,咱們訓練了基於CNN的VQA無源評價模型來對視頻圖像的質量進行評價,並實現對大盤質量的監控,此外,爲了指導線下開發,咱們還有一個主觀評價系統
接下來讓我對淘寶的S265編碼器作一個簡單的總結。MSU國際編碼器大賽是你們所熟知的一個比賽。在去年的比賽中有100個序列,同時有1080p和4k兩種測試,有3種速度檔次,還包括主觀和客觀測試。咱們用S265對MSU 2019 1080p的測試序列進行了測試,咱們的PSNR的指標三個檔次上平均節約了42.1%的碼率,對比2019年第一名是37.3%,說明S265的PSNR指標在業界領先。下面的兩張圖片,左邊是X265的結果,右邊是S265的結果,S265在主觀質量上也有比較大的提高,這裏特別感謝清華劉老師在S265項目中給予的幫助。
3.4 零轉碼系統
淘寶直播的第二大核心技術是零轉碼系統。普通的有轉碼系統爲了適應不一樣的網絡環境,一般會在服務器集羣上對上行碼流進行各類分辨率、各類碼率的壓縮來應對各類網絡環境,對於一個好的網絡,可能更偏向播出一個高分辨率的視頻,若是用戶的網絡很差,會選擇播放低分辨率低碼率的視頻。淘寶直播則實現了零轉碼,播放的是原始的生產流。這須要解決三個核心問題。第一個是端側生產,咱們要生產出高質量低碼率視頻,這個得益於前面說的S265編碼器以及前處理技術。第二個就是H265的解碼兼容性,目前H265在Web解碼以及手機芯片解碼的兼容上作得還不夠好,咱們在此作了大量的工做來解決這個問題。第三個是網絡環境的適應能力,咱們能夠經過SVC技術來適應客戶不一樣的網絡環境。
淘寶直播的零轉碼系統首先須要解決的是H265的百分之百解碼。對於如今常見的高端芯片,例如iphone7以上的手機以及中高端以上的安卓手機都已經支持H265的解碼,但還有大量的中低端設備並不能支持H265的硬解,因此咱們開發了一個高性能H265解碼器。咱們的解碼器相比FFmpeg有140%的提速,比業界常見的libhevc也快了許多,相比競品K也有10%以上的提速,能夠實現低端機的軟解。除此之外,Web端的解碼一直是H265的一個痛點,咱們實現了WebAssembly的解碼方案,能夠覆蓋大部分pc解碼能力。除此以外,還有Webkit+Native的解碼方式。經過這些努力,咱們把H265的解碼實現安卓、IOS以及web端百分之百的兼容從而徹底去除轉碼的環節。
零轉碼系統須要解決的第二個核心問題是網絡自適應技術。這項技術得益於三個方面。第一個是咱們低碼率高質量的生產,咱們生產的800kbps碼流在 90%以上網絡均可承載。第二個是時域可分層SVC策略,如圖,在用戶網絡較好時,淘寶直播會使用100%的下發幀率,若是用戶網絡很差,將會採用3/4抽幀來實現18幀的解碼效果,若是用戶網絡效果仍是不理想,會選擇抽取1/2的幀來實現12.5fps的解碼效果。除此之外還有一個基於A3C網絡來綜合用戶的網絡緩存以及用戶當前的編碼質量來實現QoE的最大化。
3.5 低延時技術
淘寶直播的第三個核心技術是低延時技術。咱們實現了直播端到端秒級延時,還驗證了低延時技術的業務價值;除此以外,低延時還能夠支持新業務形態,如拍賣直播、客服直播等。傳統的HLS/FLV直播協議的延時,從生產側來看主要有編碼延時、網絡延時、分發延時、切片緩衝和播放緩衝,總體加起來大概有10s左右的延時。Flv去除了服務器上的切片緩衝,能夠把延時下降到5s左右,但延時時間仍是比較長。但淘寶直播的秒級延時採用了UDP的流媒體傳輸協議,WebRTC的擁塞控制及FEC、netEQ的擁塞控制算法來去除播放器緩衝,而且盡咱們最大努力減小防抖緩衝的大小。在生產側,咱們還採用了低延時的編碼技術來下降編碼器的延遲。
這是咱們在低延時編碼上作的工做。編碼延時主要來源三個方面:B幀、Lookahead以及Frame thread。以x265爲例,編碼效率在必定區間內與延時成正比。當延時下降到8幀時,編碼效率降低20%,5幀的編碼效率降低30%;優化後S265採用了短距Lookahead CU-tree傳播代價以及運動強度,做爲機器學習模型的訓練數據,預測長距lookahead CU-tree傳播代價來提升咱們在低Lookahead下的編碼質量。如圖,S265在5個延時幀下,可達到95%以上的編碼效率。
最後一塊兒來討論一下音視頻技術的發展趨勢。我我的以爲傳統信號處理已經很是成熟,AI又有比較強的學習能力,因此怎麼結合傳統信號處理的優點和AI的學習能力來提升咱們內容的生產以及內容理解、傳輸等等的效率是咱們下一步的發展趨勢。主要包含五個方面,第一個是視頻編解碼,第二個是智能語音處理,第三個是圖像加強技術,第四個是內容理解算法,第五個是高效傳輸技術。
4.1 視頻編解碼
首先來看一下視頻編解碼,視頻編解碼的第一個趨勢是雲邊端一體編碼系統。硬編碼主要面對的挑戰是壓縮效率。咱們知道傳統的手機芯片壓縮都會考慮到PPA問題,因此會提供一個相對而言較低的壓縮效率。軟編碼的挑戰主要是壓縮速度,雖然有些像Intel的SVT技術能夠把壓縮速度提到比較高的水平,可是畫質會有一些受損。將來趨勢我的以爲儘量的利用到端側的算力,採用高性能軟編碼器來緩解雲端轉碼的成本壓力 ,把手機芯片硬編碼能力利用起來,可是移動端芯片硬編碼的質量還不夠好,如何優化移動端芯片硬編碼質量是一個關鍵的點;其次是雲+邊的統一的轉碼。如今愈來愈多的ASIC芯片和GPU芯片已經在努力優化編碼的質量,包括FPGA芯片也有優化方案。因此雲+邊的轉碼會成爲咱們下一階段研究的重點。
視頻編解碼的第二個趨勢是下一代編碼標準的應用。主要有H26六、AV一、AVS3,這三個標準目前是各有本身的優點。H266在傳統芯片的支持上比較好;AV1有先發優點,並且Web兼容性較好,在專利上也有些優點;AVS3通過你們的努力,已經擁有國內生態,且在實體清單的影響下AVS3的發展可能會加速。
第三個趨勢是AI+編碼。你們也注意到CVPR比賽的狀況,AI壓縮能夠實現對比H266更好的壓縮結果,可是在解碼速度方面仍是會有一些問題,端到端DL壓縮在將來會是一個研究熱點。除此之外,混合編碼框架下的AI壓縮也是一個研究熱點;第三是場景自適應編碼技術,可以根據場景選擇編碼也是一個很好的技術;第四個是無參考評價系統,在不少時候,有參考能夠評價的比較客觀,但不少時候,咱們拿不到參考,這時候,無參考評價系統就會比較有優點。
4.2 智能語音處理
對於智能語音處理,總結下來主要也分爲三個方面。第一是前端3A處理,主要考察PESQ,STOI的指標以及處理和收斂速度,智能降噪,智能回聲消除,盲源分離技術,自動增益技術也會是信號處理和AI的很是好的結合點;第二是後端網絡自適應,先考察丟包下的聲音體驗。這裏有音頻超分,智能PLC,自適應碼率以及RSFEC、NACK來實現恢復與延時的平衡等等;第三,音效與評價主要考察覈聲音的主觀體驗,如何作到智能美聲、自動混響和無參考評價會是咱們研究的方向。
4.3 圖像加強、視頻內容理解、高效傳輸技術
第三個方面是圖像加強,即如何利用傳統圖像加強與AI結合達到智能去噪、暗光加強、智能選幀和拍攝輔助的效果。第四個方面視頻內容理解,能夠用多模態技術來理解視頻內容包括通用物體檢測、文本語義理解、天然語言處理NLP、標籤體系和大規模檢索技術等等。第五個方面是高效傳輸技術,5G的到來能夠提供高帶寬,低延時的傳輸,如何利用5G優點實現智能帶寬預測,智能調度系統是咱們在網絡傳輸方面研究的一個方向。