1. 程式人生 > >無碼&流暢的視訊直播監控體系

無碼&流暢的視訊直播監控體系

背景

影響視訊質量的因素是多樣和複雜的。從主播端到看播端整條路徑上,任何一環出問題,比如位元速率降低,解析度降低,幀率降低,光源使用不當,濾鏡使用不當,傳輸層丟包,播放端網路質量差,播放端解碼能力弱等等,都可能導致視訊質量下降。

檢測視訊質量一直以來有兩種方式,分別是客觀評價和主觀評價。

  • 所謂客觀評價就是將評價目標和一個標準的原始源進行對比,計算峰值信噪比(PSNR)以及衍生的一系列評價指標。
  • 主觀評價就是由評價人員按照一定打分標準,對目標視訊進行打分。

無論是哪一種方式,在大規模全民互動直播場景下,都顯得捉襟見肘。這裡我們建立了一個通過主觀評價方式對一個相對小的視訊集合進行分類標註,然後用機器學習的辦法提取出模型,再擴充套件到對所有視訊物件進行自動評價打分的方案,相應的建立了一個取樣和分析的伺服器叢集,對花椒全網的頻道進行自動畫質監控。

架構

1. 邏輯結構

取樣層:

視訊本質上是由一幀一幀的連續圖片組成的,所以通過提取場景關鍵幀的方式來代表某個時間段內的視訊是一種普適的視訊分析方法。我們也採用定期的方式(2~4s)從視訊流裡獲取關鍵幀截圖。然後將其交給分析層做進一步處理。

分析層:

預先通過機器學習的辦法,得到一個訓練過的模型,針對每一個輸入的圖片,套用模型分析處理,可以得到分類結果,這就是我們的自動評分。將評分結果交給業務處理層做進一步處理。

業務處理層:

由於分析層給出的只是某一小段時間的靜止的場景判斷結果,而實際情況下,視訊又是一個由連續和不斷變化的場景組成的集合,所以只靠一兩次的識別結果進行判斷,會有較大的誤差。通過在業務層為每個視訊流增加一個歷次結果cache滑動視窗,快取最近一段時間的結果,然後每收到一個新的分析結果,就按照預設演算法,重新計算一次整個視訊的質量判別結果,得到一個新的基於本視訊流的評分。從而平滑了機器學習演算法的誤差,得到一個更為穩定的輸出。

介面/表示層:

通過介面API的方式,將視訊的判別結果提供給第三方,由其進行業務相關的擴充套件使用。

2. 當前部署物理拓撲說明

整個系統架構依託於花椒已有的視訊實時截圖服務以及花椒業務介面服務

  • 視訊分析系統首先從花椒業務介面獲取到線上直播視訊基本資訊;
  • 根據這些資訊做一定的負載均衡,把監控任務分發到制定的worker機;
  • worker機會按照一定間隔從截圖服務中獲取截圖,做一定預處理生成向量;
  • 由訓練好的模型進行預測分析;
  • 分析結果入庫後會提供web展示頁、介面訂閱服務、已經通過報警app、郵件等的統計和報警服務;

3. 系統承載量分析

當前視訊雲預設是每2s更新一張直播間截圖,高峰期平均每秒需要處理的流的量級為數萬(流的路數/2)。正常情況每張圖的大小在100kB~200kB之間,以平均150kB計算。在頻寬需求上,約有幾十G。如果單臺機器使用千兆網絡卡,則至少需要幾十臺機器。線上機器單核提取一張截圖的維度資訊時間大概是30ms左右,然後進行分類所需時間大概是20ms左右,平均下來,單核1s時間可以處理的圖片數量大致是20張。目前採用機器是32核,即理論上1s時間可以處理640路流,從計算實時性上來分析,也需要幾十臺機器。

系統結構說明:這裡使用了N臺視頻分析伺服器,其工作就是從視訊雲請求關鍵幀,分析提取向量資訊,歸類得到質量好壞結果,然後存入共享的資料庫中。另外使用了其中1臺伺服器作任務排程,併兼做分析結果儲存。另外為了節省裝置,目前的中間業務伺服器,對外介面伺服器是和一臺視訊伺服器公用同一物理機。以15s和1min作為cache視窗,每15s對live/latest/school三個大項做一次整體評價,每1min對所有流做一次整體評價,然後由對外介面層生成一個評價結果的html網頁以及一個json格式的檔案。

4. 資料流向說明

  • 邏輯上在另一網路部署有一個任務,定期更新當前全網開流狀態,將結果以json字典方式儲存,每個小項儲存每個流的sn,liveid,uid。
  • 流元資訊模組定期從另一個網路獲取上文的json資料,提取當前開流資訊,並存入任務排程伺服器上的redis資料庫。存入時將sn做md5雜湊,取其雜湊結果的頭兩個字母作為sharding的標記,得到256個redis的sn表項。
  • 圖片預處理模組啟動時對相應流的sn進行編號,作用是每隔3s從排程伺服器上獲取自己編號對應的sn表項,然後去視訊雲下載對應sn的截圖,分析,輸出結果,存入排程伺服器的”svm_result”表。
  • 流質量分析模組將每個視訊流cache結果視窗內的所有結果進行整合,得出一個最終結果,並輸出html和json檔案。另外為便於進一步分析問題,在html裡設定了明細連結,可以檢視具體的每一個關鍵幀的分析結果。
  • 介面訂閱伺服器存在於別的網路上,定期利用上文的對外介面,獲取json格式的視訊質量資訊,進行相應的處理,如發郵件報警,app訊息push報警等。

展望

當前採用的svm是淺層學習方案,特點是隻需要較少的樣本就可以生成有一定效果的模型,但是還存在一些場景的不適應。目前基於神經網路的深度學習已經十分成熟,其外部框架如caffe,tensorflow, thera都逐漸流行起來,下一步可以結合這些框架,並同執行客服協調對視訊流進行標註,增加機器學習的樣本,進一步的優化識別結果。

總結

1. 視訊質量評價方法總結

客觀評價:
客觀評價指的是不需要人為評價的方法,即將原視訊與處理後的視訊進行對比。可以進行象素級別的對比,也可以對某些特性進行提取和對比。客觀評價指標常見的有PSNR(峰值信噪比),MSE(均值方差),SSIM(結構相似度)等。

主觀評價:
主觀評價是指由評測人員參與,對視訊質量進行評估,相應的有一些主觀評價工具,供評測者對待測視訊進行打分。

此外對視訊的清晰度也有一些客觀評價的指標,如各類梯度函式,Brenner,Tenengrad等等。其原理是通過判斷影象的象素點的灰度/RGB值等的變化程度判斷影象是否清晰。

2. 機器學習的一些相關說明

SVM支援向量機

一種淺層機器學習分類方法,除了做線性分類,還可以結合核函式,將低緯度向量對映到更高維度實現線性分類的目的。在目前的系統中,採用了SVM來做圖片質量分類。這種方式需要提取圖片的清晰度特徵,這裡我們提取的是梯度特徵。

深度學習神經網路,如CNN

通過卷積,亞取樣,池化(pooling)等一層又一層的疊加操作,將圖片提取出更多資訊,並通過損失函式(loss)來校正處理分類引數,最後得到基於學習樣本最佳的分類引數作為輸出模型。理論上只要學習樣本越多,最後的精度會越高。

原文來微信公眾號:HULK 一線技術雜談