本文將詳解優酷“智能檔”的是什麼、為什麼以及落地效果,尤其是如何突破“傳統自適應碼率算法”的局限,解決視頻觀看體驗中高清和流暢的矛盾,並以 “熱綜熱劇”等場景為藍本,一睹“大項目”背後的視頻播放實踐。
本文主要分為四部分:
背景:智能檔是什麼、有什麼?
挑戰:傳統自適應碼率理論與播放實踐的碰撞
實踐:清晰度策略優化迭代過程——整體框架建設,從數據中分析和學習
總結:優酷智能檔的成果和新技術的應用
優酷“智能檔”是什麼、有什麼?
為了大家能夠對優酷智能檔有一個比較直觀的了解,我這裏準備了一個帶寬限速條件下播放的視頻。視頻1是傳統1080P藍光清晰度,視頻2就是今天要提到的“智能“清晰度。我們看到視頻1已經開始卡了,視頻2還在繼續播放,但清晰度角標已經變為超清了。
好,剛剛播放的是《長安十二時辰》張小敬追捕狼衛的一段視頻,是在帶寬限速的情況下播放的,大致是在 1.5Mbps 左右。在這樣的條件下左側使用 1080P清晰度,當畫麵變化較大,對應的碼率也波動較大的時候,發生了卡頓,而且提示是否要切換到智能播放。而右側的“智能”清晰度則在這種情況下,發現了網絡不足以支撐藍光,降級變成了超清,避免了卡頓,然後在這段播過去之後又重新恢複到藍光。
? 優酷“智能檔”簡介
看完這段視頻,我們來明確一下,關於智能檔的幾個基本問題:
1) 什麼是智能檔,這個大家剛剛也都看到了,智能檔是一種新的清晰度選項。
2) 為什麼要有智能檔?我們可以從兩個角度回答:
讓播放體驗更加智能。例如,用戶在一個不確定的網絡環境下,不知道什麼清晰度最合適,選擇高清晰度,卡了;選擇低清晰度,畫質體驗又不好。優酷智能檔就是要解決這個選擇問題,智能匹配最合適的清晰度,避免用戶自己反複去嚐試;
避免播放卡頓。例如剛才的《長安十二時辰》視頻,在網絡限速或者更常見的4G下,網絡波動大,智能檔實時地調節清晰度,在保證用戶觀看更高清晰度的情況下,避免播放卡頓。
3) 是如何實現的呢?這就要提到自適應碼率技術,根據網絡環境和播放過程中的狀態,去實時決策選擇最合適的清晰度。
? 自適應碼率技術
自適應碼率這項技術,早在 2002 年前後就已經被人提出,大致在 2010 年開始在互聯網領域得到應用,逐步走向成熟。關於自適應碼率的技術方案,一般由兩部分構成:
第一部分協議框架:支持多個不同碼率的清晰度傳輸和播放,約定服務器端、客戶端的;
第二部分算法策略:更具體地確定什麼狀態下匹配哪種碼率、哪種清晰度更好。
在協議框架上,蘋果較早提出了 HLS 的方案。後來 MPEG 專家組提出行業標準DASH;除此之外,微軟、Adobe等公司也有技術方案,但設計上比較類似,大同小異。
在算法策略上,是百花齊放。過去幾年,學術界湧現出不少相關論文,比如右側列表中所示,歸納起來分為4類:
第一類,基於網速預測,根據網速帶寬和碼率的大小進行選擇;
第二類,基於播放器的buffer來判斷決策;
第三類,引用一句話網絡名言“小孩子才做選擇,我全都要”,即融合前麵兩種因素;
第四類,更高級和領先的,將近幾年的人工智能領域的技術引進來,根據機器學習、神經網絡模型來選擇清晰度。
? 自適應碼率技術的工作流程
自適應碼率技術在從生產到播放的整個鏈路,分成5步:
第一步,原始的視頻資源文件,它可能隻有一個比較高的清晰度;
第二步,生產端對視頻進行轉碼和切片,根據播放需要,轉碼成不同清晰度的碼流。一般清晰度越高,碼率越高,文件越大。每個碼流都切分成時間對齊的分片,一般是10s;
第三步,在轉碼和切片之後,經過 CDN 節點在網絡上進行分發;
第四步,各自適應碼率的算法按策略選擇需要的清晰度;
第五步:客戶端下載這個清晰度的分片文件,進行播放。
? 自適應碼率算法:基於帶寬速率
看完框架鏈路,我們再來看算法策略,先是最簡單的基於帶寬的策略。
這類算法的原理很簡單,就是基於過去一段時間的網絡下載速度,對網絡情況做預測,如果比視頻某一個清晰度的碼率大,那麼就可以選擇這個碼率,否則隻能嚐試更低清晰度。右上角圖中列出了4種算法,都是基於速度進行判斷的,清晰度和網速變化是正相關。
這個算法簡單直接,缺點是如果過去網速高,對網絡的預估又過於自信,網絡波動落差大時,就無法下載完預期的清晰度內容,容易卡頓。
另外,清晰度受網絡波動影響大,網絡一波動,就會頻繁的切換清晰度,這相當於忽略掉播放器中buffer的作用。
? 自適應碼率算法:基於Buffer
基於buffer,就是播放器的緩衝區還能播多長時間來選擇。這種方式直接放棄速度,隻看 buffer,沒數據可播時才會卡。當buffer 低時,選擇最低清晰度,buffer隨播放進度和下載進度一點點變化,清晰度不會有太大波動。
缺點是buffer的變化相對緩慢,會喪失對網絡變化判斷的靈敏性。比如用戶網絡換環境立刻變好了,但是 buffer 漲到最高清晰度的區間是需要一個過程的。
一個典型的案例就是 BBA 算法,我們可以右側這張圖,橫軸是 buffer,縱軸是清晰度碼率,它們之間維持一個線性關係,buffer越高清晰度越高,直到達到最高的清晰度;同時為了保證不卡頓,最低清晰度也要攢夠一定的buffer,才開始考慮換更高的清晰度。
? 自適應碼率算法-MPC
這類算法有一個裏程碑式的進步,給出一個 QoE 的公式化定義。QoE就是體驗質量,包含清晰度、卡頓時間、清晰度切換3個因素。一旦確立好QoE 的計算公式,在網絡狀況完全確定的情況下,我們就可以將自適應碼率算法轉化為一個求最大值的數學問題。
但是網絡狀況完全確定需要“上帝視角”。一般情況下,網絡波動是可完全預測的,在一個較短時間內,我們認為網絡波動會比較小,後麵網絡情況和前麵已經統計到的速度存在一定關聯性,所以上麵的這種求全局最大值的就可以退化成為一種局部的計算,並嚐試通過局部累加,達到近似全局最優解,這好比是從一個全局的動態規劃變成一個局部的貪心思路。
所以它的具體決策過程是:
第一步,根據過去的情況,判斷網絡質量,預測速度;
第二步,生成未來N片,比如5片,將所有可能的清晰度組合做列表;
第三步,逐一嚐試,找出所有可選項中 QoE 最大的組合;
第四步,將選擇中下一片清晰度作為本次清晰度選項,每個分片選擇時都依次類推。
? 自適應碼率算法-基於機器學習
機器學習就是為計算機提供大量數據,讓計算機基於這些數據進行計算,在特定領域做出判斷,並針對判斷給出評定標準,告知機器判斷是否正確、準確,經過反複大量的學習過程,提高計算機判斷能力的準確性。
強化學習是機器學習的一種,是針對一個過程該如何做決策的學習。
如下圖,機器人學習養花,看見花要枯死了,選擇用水澆花,獲得一個正向的獎勵;如果看到花快被淹死了,還去澆花,那麼就隻能得到懲罰,此外還可以根據情況考慮是否施肥、打藥,訓練機器人把花養好。
近年比較火的機器學習方式就是深度神經網絡。我們可以將“養花過程中機器人的動作” 理解為一個非常複雜的數學函數,輸入是花的狀態,輸出是應該澆水還是施肥的決策選擇,花是否養好作為不斷調整函數內參數的依據,一旦參數調整好,這個函數就可以給出準確決策,神經網絡就相當於這個複雜的函數,具體的一個模型實例就相當於這個函數裏所需的所有係數。
我們做清晰度選擇的例子和養花的過程很像,輸入是過去的網速情況、buffer情況等,輸出是清晰度的選擇。
2017年開始有論文提出類似的方案,優點是用大量的數據去訓練,訓練好了就相當一個“經驗豐富”的人,它看過很多曆史網絡變化的數據和選擇結果、知道遇到特定的情況應該如何選擇。弊端是太“高深莫測”,可解釋性不強。
? 業界應用情況
國外的視頻產品,Youtube 和 Netflix的手機客戶端都有對自適應碼率技術的應用。在國內,早在兩年前,優酷就在做類似嚐試,但最初的清晰度選項叫做“自動”,在起播時幫用戶選擇一個合適的清晰度,但是播放過程中如果網絡有波動它不會變。隨著優酷技術體係不斷升級,現在優酷能夠通過“智能”選項,隨時隨地的根據網絡情況進行清晰度選擇和必要的切換。
實際應用中的挑戰
自適應碼率技術的理論雖好,在大規模實踐中,卻屢屢碰壁,歸納起來有如下的挑戰:
? 實際應用中的挑戰:起播處理
起播的典型挑戰是:
典型策略:環境未知,如何避免卡頓;
網絡環境良好的狀態下,如何提升清晰度。按照學術界的算法論文,起播時為了避免卡頓,都是從最低清晰度開始,但實際尤其對於沒有使用過同類產品的用戶,10s的模糊不能被接收的;
起播速度:如何快速播放。為了高清和起播後不卡頓,多加載一會兒,行不行?不行!快速起播是良好播放體驗的開始。
所以我們要遵循的原則是:
如果網絡足夠好,起播就提供高清晰度;
為了避免卡頓和起播太慢,必須在網絡差的情況,適當地選擇低清晰度;
不能為清晰度選擇而給播放帶來太大的額外開銷。
優酷是如何解決的?
首先,根據視頻是否為首次播放進行分類。不是首次播放的,可參考前一次播放的清晰度;是首次播放的,參考播放服務的請求耗時。在連播情況下,既然可以用上一次播放的清晰度,也可以利用上一次的播放中的速度信息,更確切知道當時的網絡情況;
其次,我們發現請求耗時的區分度並不大。播放器也在進行一個網絡質量評估的項目,這樣就引入了網絡評分機製,作為清晰度的一項參考;
最後,秒播項目也全麵鋪開,在播放前下載一個分片。一方麵下載過程提供了速度信息,另一方麵我們也需要結合分片的清晰度進行選擇,避免起播清晰度頻繁波動。
? 實際應用中的挑戰——網絡情況預測
第二個挑戰就是對網絡情況的判斷,即對帶寬的預測;雖然不少論文都提到了根據曆史下載速度求平均值,對當前或接下來速度做預測,但是關於細節基本都避而不談。
網速非常重要,它是對當前網絡判斷最直接的數據來源,也是保證升降檔快速靈活的一個關鍵因素。
速度預測的難點是網絡情況是實時變化的,不同環境變化形式和方向都不同。例如,上圖中就是截然不同的兩種網絡條件,第一個網速高且穩定,第二個網速在極速波動。所以預測速度的原則是盡量保守、盡量平緩,吸收掉波動情況,即對過去一段時間的速度取平均值。平均值的計算方式,可以結合上圖的兩種情況來看:
一是,傳統算數平均數和調和平均數的方式;
二是,將對過去速度預測的誤差考慮進去,也是robustmpc方案中提到的,更適合我們的需求。
那麼,隻有速度預估就夠了嗎?當然不是。由於網速是可隨時波動的,實際網速也可能達不到預測速度,所以我們需要兜底方案。這裏采用的是超時,即在預期的時間內,如果當前清晰度分片下載不完,將自動調整,避免 buffer 消耗後發生卡頓。
超時設置也需要精心考量,超時意味著當前分片如果下載不完就要丟棄,那麼已下載完成的部分是不能用來播放的,否則就會出現同一視頻內容用兩種不同的清晰度重複播放。所以buffer較小時,不適合超時,否則容易增加卡頓。
什麼情況設置超時呢?預期超時是用來解決問題的,首先是選擇清晰度預期它能下載完,如果下載不完,我們可以用更低清晰度來替代。我們要保證現有的buffer足夠這兩個清晰度下載完成的時間,此外要盡量留足時間,讓當前清晰度的下載能夠在較小的波動下完成,避免頻繁切帶來的網絡浪費和不好體驗。
體驗衡量
隨著智能檔的推廣和應用,我們也需要考慮帶寬成本,行業通用解決方案是使用 PCDN,在播放允許的情況下,避免直接向成本較高的CDN服務器請求轉而找到成本較低,但質量不太穩定的節點,這樣就會引起速度的波動。
這個問題如何解決?首先,PCDN 調度的原則,是將 buffer 趨於劃分為三段:第一段是buffer較低的情況,為了避免卡頓保證服務質量,會直接走CDN;第二段是部分從CDN下載,部分使用質量較差的P2P節點;第三段是buffer較高的情況,卡頓風險低,直接斷開CDN,隻使用P2P。
簡單來說,為了保證智能檔用戶有穩定體驗,我們在節點切換的過程中,始終保持使用一個較高的速度,比如使用連接CDN時的速度,如果 P2P的速度比 CDN的速度高,我們可以使用這個更高的速度,當質量較差的節點滿足不了當前速度時,buffer就會降低,迫使PCDN逐步切換回高質量的節點,這樣就做到了和 PCDN結合的自適應調整,做到了速度的相對穩定。
? 實際應用中的挑戰——其它
在實踐過程中麵臨的挑戰,如何衡量智能檔的體驗,如何評價效果。
學術論文的衡量標準是看QoE,它包含了對清晰度質量、卡頓和清晰度波動的因素。但它是單一值,兩次不同的播放,QoE一個高一個低,說明前一個體驗更好,但是無法知道差的原因,是卡頓太多還是清晰度太低?所以單一值,不利於我們衡量真實效果,也不利於明確優化方向。
所以,我們最終通過和實際業務目標相結合,整體看全盤數據,同時將卡頓率、高清晰度的播放時長占比拆開來看。卡頓率高了,要想辦法降卡頓,策略上要相對保守;如果高清晰度少了,就要適當調整策略,讓用戶更容易升到高清晰度。
此外,播放的體驗好不好需要多維度考量,除以上兩個關鍵指標外,我們也增加了其它維度數據,比如,使用智能檔用戶的播放量占比、一次播放的清晰度切換頻次,高buffer降檔的反常體驗發生比率等。
實際上,我們在實踐的過程中遇到的挑戰還不止這些,比如倍速播放的情況,4G下考慮流量的問題等。受時間和篇幅的限製,就不一一展開了。
智能檔的設計、實現與優化迭代
以上介紹了自適應碼率技術的一般原理和挑戰,接下來從整體分析,優酷智能檔是如何設計的,又是如何優化。
? 優酷智能檔的整體結構設計
智能檔的整體框架分為上下兩部分,下層是客戶端,上層是服務器端。
第一,清晰度選擇的控製器是在客戶端,包含一個策略引擎,支持多種策略實現運行,為策略的運行提供了統一接口;控製器需要與播放器內核的數據源處理部分打交道,從播放器內核獲取到視頻的基本信息,比如支持幾個清晰度、每個清晰度碼率多少,有多少個分片、每個分片多大,同時也從播放器收集當前的播放狀態,比如當前的buffer 狀態;此外,客戶端還需要從下載器那裏得到各分片的下載速度,從全局的網絡監測模塊感知當前的網絡質量情況,最後執行策略,輸出下一個清晰度,通過內核交由下載器去下載,進而播放;
第二,智能檔的控製器每次播放後會收集整個決策過程中的輸入/輸出信息,並上報到服務器端,服務器端用這個數據做統計、分析、優化,然後進一步改進策略,形成一套完整的閉環的數據體係。
? 策略實現-多策略支持
結合前麵算法論文中的理論,我們先後嚐試過實現四種策略:
第一種:Pattaya 是我們最早嚐試的一種策略,將單獨基於速度的一類策略,後來也引入了基於 buffer 策略,不斷根據數據情況增加一些經驗規則進去,也是早期進行鏈路調試的一個策略;
第二種:基於強化學習的策略;
第三種:實現和調試了基於 MPC 思路的策略;
第四種:根據經驗創造出來的,基於下載嚐試和超時的SBit策略。
我們以 AB Test 的形式分桶開啟各個策略,觀察效果逐步優化,最終形成一套統一策略,包含起播/Seek決策、播中決策、超時處理、卡頓處理等幾個關鍵組成部分。
? 數據體係建設-信息的收集與解析
上麵提到四類策略,在衡量效果時,我們提到了一些關鍵指標,相關的統計數據在上線之初就進行了支持。那麼,這四類策略是不是上線就表現良好,表現不好的原因是什麼,這就需要對每一次播放數據的輸入和輸出都有詳細記錄,如圖中的數據結構。
第一步,早期我們考慮一次播放的決策數據量比較大,同時還不具備這種批量數據處理分析的能力,主要是以日誌的方式打出來;
第二步,我們了解到阿裏雲的數據工場能夠提供這樣一種能力,通過自定義 UDF 解析結構複雜的編碼數據,並且通過一般的編程語言以實現插件的形式,完成各式各樣的分析,這樣我們就將客戶端上每次播放的所有相關的輸入和輸出,按照一定的格式組織起來,進行壓縮、編碼通過埋點渠道報上來,需要分析的時候在數據平台上解碼分析。
上圖,是一個經過編碼的智能檔播放信息,報到服務器端之後,我們通過數據平台對立麵的信息進行解析。當然這張圖立麵隻畫出了其中一部分信息,包含原始的輸入速度、預測的速度、播放器buffer的變化情況,這樣整個智能檔的決策過程就盡收眼底。
? 數據體係建設-優化應用
當完整數據體係建立之後,我們就可以進行優化。下麵以卡頓優化為例,我們是這樣操作的:
第一步,當版本發布後,觀察整體的大盤數據,發現卡頓超出預期,我們會分析用戶用例,對卡頓情況有初出認知。
第二步,基於已知信息做分類規則,比如,是起播就卡,還是播了很久之後才卡;是因為網絡差,清晰度降底都還會卡,還是在策略上有優化的空間?
第三步,根據規則將所有發生過卡頓的播放數據做聚合分析,知道每種可能情況的占比,有針對性分優先級的去解決和處理問題;
不隻卡頓,還是其它像高清晰度沒有達到預期,都可以用這種方式進行分析。這些數據除了分析這些問題以外,還有利於我們對整個優酷用戶播放過程有一個更全麵的了解,比如說他們的網絡情況分布等。
? 智能檔的應用推廣
在智能檔完成設計、實現、優化,我們希望它能夠在更多的場景上得到應用。智能檔最初是在手機兩端上率先完善和放量,其次是iPad端。在過去一年,我們也在iKu OTT 等客戶端場景下投入使用。
這裏麵需要強調是大型直播場景,比如雙11貓晚、近期的義演直播《相信未來》,直播和點播場景有差異:
第一、直播要求低延遲,比如看球賽,不能隔壁進球了,這裏還在射門。所以這個特點就決定了端上播放器不能有太多buffer,智能檔的決策需要做適當的調整,更多的從網速上獲取信息;
第二、直播是實時性的,生產端生產出視頻流是實時進行的,而且通常的直播時長比一集電視劇時間還要長,所以存在技術風險,這時候智能檔就有了用武之地。
和直播場景有關的第一個問題是流量控製,某一場直播開始前,會預估流量,但實際可能因為某個節目特別火爆,新用戶源源不斷地湧進來。在服務器流量壓力大時,智能檔可以通過實時下發配置適當的調整用戶的清晰度,例如,必要情況下,降低一個清晰度,實時緩解服務器帶寬和流量壓力。這是傳統清晰度所做不到的,傳統清晰度可能從進入直播間到看完就固定在一個清晰度碼率上。
另外一個常見問題是直播時,在生產端可能會出現某一路流轉碼失敗,智能檔發現問題後,可以直接標記這路流不可用,在後麵的播放切到其它相近的清晰度時,保證整體直播效果不會受到太大的影響。
智能檔的應用總結及未來
在過去一年,優酷智能檔已經逐漸走向成熟:
優酷智能檔在過去一年的建設過程中,覆蓋了移動端約30%的播放量,甚至比播放某些傳統的清晰度播放量都高;
從智能檔內的各個清晰度播放時長來看,能夠讓用戶在90% 以上的時間觀看比較高的清晰度,同時保持著比一般清晰度更低的卡頓率,尤其在 4G 網絡下,能夠做到傳統清晰度的一半;
智能檔為優酷整體的播放體驗優化提供了工具,也在直播等場景成為了技術保障的必要手段;
最重要的,經過過去一年的優化,獲得了用戶的認可。
對於未來,主要有兩點思考:
隨著 5G 的發展,越來越多的用戶將移動蜂窩網絡下觀看視頻,智能檔會得到更多應用。可能大家要問了,5G網速那麼快,還需要智能檔嗎?這裏我想到了一句話,"What Andy gives Bill takes away",“安迪比爾定律”,這裏麵 Andy 是 Intel 的 CEO, Bill就是比爾蓋茨了。意思是無論 Intel的 CPU 造的多麼先進,都會被新的 Windows 係統消耗掉。回到播放場景,網絡技術是在發展,但人們對高清視頻的需求也在不斷提高,所以智能檔是必要的;
另外,一定會出現新的手段,讓自適應碼率技術的效果更好。比如今天提到的Pensieve,利用強化學習來進行清晰度選擇。這個原作者在 2019 年又發表了一篇新論文,大致內容是他又改進了算法模型,開始在 Facebook 進行實驗,這是個未來的方向,現在的可解釋性等等問題應該都會逐步得到解決。
機器人招商Disinfection Robot機器人公司機器人應用智能醫療物聯網機器人排名機器人企業機器人政策教育機器人迎賓機器人機器人開發獨角獸消毒機器人品牌消毒機器人合理用藥地圖 |