極牛技術實踐分享活動 算法
極牛技術實踐分享系列活動是極牛聯合頂級VC、技術專家,爲企業、技術人提供的一種系統的線上技術分享活動。微信
每期不一樣的技術主題,和行業專家深度探討,專一解決技術實踐難點,推進技術創新,每兩週的週三20點正式開課。歡迎各個機構、企業、行業專家、技術人報名參加。網絡
本期大綱框架
直播中用戶問題運維
視頻編碼的基本概念動畫
視頻編碼的應用場景編碼
視頻編碼的實現框架雲計算
直播中視頻編碼策略spa
嘉賓介紹
朱玲,網易視頻雲高級研發工程師,音視頻專家。
中科大碩士畢業,進入思科Webex,參與的主要項目包括:視頻會議編解碼器研發、視頻傳輸控制研發、開源項目openh264的開發維護等。15年加入網易,主要參與視頻直播及互動直播開發,主要負責推流客戶端、SDK 的開發維護以及互動視頻直播方案的開發。視頻
朱玲老師本期的分享圍繞她對視頻編解碼的認識,以及在視頻直播/互動直播產品開發過程當中,對視頻編解碼器的實踐心得展開。首先解答了網易視頻雲在對接客戶過程當中,關於視頻比較多的幾個問題,而後介紹視頻編碼的基本概念,發展情況,以及實現框架,最後介紹了在視頻直播應用場景下,對視頻編解碼器作出的一些策略選擇。
用戶問題
咱們視頻雲大約有幾百家 B 端用戶,問的比較多的跟視頻編解碼相關的問題有
1)我看本身清晰的很,觀衆看到的畫面怎麼有點模糊呢?
2)我上行帶寬有 200kbps,怎麼就發送不了視頻呢,視頻怎麼就不流暢了呢,一頓一頓的呢?
3)我直播時候畫面靜止的時候碼率很平穩,爲啥一運動,碼率就會 burst 呢?
其實這些問題都和視頻編碼知識相關,當咱們瞭解了視頻編碼的一些概念和實現框架,再回頭來看用戶的這些問題。
視頻編碼基本概念
咱們先簡單介紹下視頻編碼的幾個基本概念,分視頻以及編碼概念介紹:
幀率:視頻是由一幅幅圖像組成,所謂幀率,就是一秒中有多少幅圖像,採集播放編碼都有幀率的概念,像咱們去電影院看的電影,幀率通常是24 ,播放的電視通常是25~29,最近李安的新電影,120幀/4K/3D拍攝的,採集幀率越高,對現實世界的還原度越好,實際上,根據人眼逗留原理,一秒10幾幀,就很流暢的動畫效果了,而不是幻燈片播放效果
分辨率:咱們常常看電視,會有選擇超清,高清,之類,這裏說的就是分辨率,即二維圖像像素個數,像素能夠理解爲一個採樣點的表達,一幅圖像的採樣點更多,數模轉換的過程當中,失真也越小,譬如咱們所說的超請 1920*1080,橫向 1920個採樣點,縱向有 1080個採樣點
碼率:採集,播放沒有碼率的概念,這個主要是視頻傳輸的概念,一秒鐘發送多少數據量,在實時應用中,自適應帶寬一直是編碼器碼率控制算法的目標,咱們針對編碼器而言就是壓縮率的概念,譬如一幀視頻(一幅圖像)通過編碼壓縮後的二進制數據量有多少
關鍵幀:這個算是視頻特有的概念吧,所謂關鍵幀,顧名思義,很關鍵,關鍵到沒有這一幀,非關鍵幀是沒法解碼的,爲何這樣呢,後面在介紹視頻編碼框架算法細節處,會作具體介紹
有損,無損
有損/無損編碼:根據編解碼先後原始信息是否有失真區分。現代數字壓縮技術中,有損無損編碼應用都到處可見,譬如咱們在發送郵件的時候,總會先把文件用zip/rar壓縮一下,對端收到這個壓縮包,解碼會徹底恢復原始信息,這就是無損編碼。而有損編碼較多見於圖像,視頻,音頻,等多媒體信息壓縮中,由於多媒體信息的原始信息太大,其次是利用人眼感官上的冗餘。
就壓縮率而言,有損的壓縮率比無損更高,舉例說明:
參考序列: Cisco_Absolute_Power_1280x720_5.yuv
原始大小:
128072083/25 = 6750KB
Archive: rar
2654KB
視頻編碼器壓縮:
H264 JM 100 IBPBP結構 56KB
就信息失真對比:有損會帶來信息失真,可是能夠利用人眼感官上的冗餘,這種失真在必定範圍內,不易察覺。
基於內容/波形編碼
從信源建模模型角度區分,咱們將咱們要壓縮的對象稱之爲信源,視頻能夠是由視頻內容中的不一樣物體運動組成,也能夠是視頻中每一個構成的像素點組成,以下圖所示:
基於內容的編碼從必定角度來講,能達到更高的壓縮率,可是其須要作圖像的特徵點檢測,找出不一樣的物體,將視頻內容分塊,計算複雜度較高,咱們大多數視頻編碼仍是採用的基於波形編碼的方式,直觀明確,兩者相互融合的,波形編碼中,也能夠結合結合視頻內容分析提升壓縮率。
視頻編碼標準發展示狀 / 實現框架 / AVC、H264的實現框架
視頻編碼標準的發展示狀
視頻編碼標準從上世紀80年代開始發展至今,有接近40年的歷史,以下圖所示:
標準一直在發展中,從第一代到如今發展到266開始收集信息階段了,每一次的標準制定以及最終成爲方案的目標就是壓縮率是以前一代標準的一倍。
目前市場上應用最普遍的仍是h264,包括硬件芯片廠商的,軟件服務廠商,都是支持h264的,雖然比h264新一代的編碼標準h265也早已經draft了,且壓縮率在分辨率較高的視頻序列中也比較高,鑑於專利費昂貴,以及普及度的問題,從應用角度來講仍是比較小衆,也所以是一些公司的宣傳賣點,固然,隨着時間的推移,一切都在發展中。
視頻編碼的實現框架
接下來,咱們會將視頻編碼框架細節的介紹縮小到H264標準中,儘管各個標準的細節,碼流語法會有不一樣,但大致上都是採用基於預測與變換結合的混合編碼模式。
AVC/H264 的實現框架
輸入視頻圖像,將圖像按照分紅 16*16 編碼宏塊,做爲編碼的基本單元,編碼器壓縮處理的並非直接的原始像素,而是會經過預測,包括幀內預測,幀間預測,獲得預測殘差,(原始像素與預測像素值之間的殘差),進行變換,變換域將低頻係數集中,高頻係數爲0,量化,zigzag掃描,熵編碼輸出,量化以後的值進行反量化,反變換,並結合預測值,得出重建值,而且區塊濾波存儲在參考幀列表中,以供後序視頻幀編碼參考用。
視頻編碼框架:預測(幀內預測 / 幀間預測)
預測編碼分爲幀內預測,幀間預測。
幀內預測,像素的預測參考對象在當前正在編碼的圖像幀內,根據已經編碼的塊信息,來預測當前編碼塊,消除像素空間上的冗餘。理論依據就是圖像空間域變化是緩慢的,相鄰像素之間的差值很小。
幀內預測有兩種模式 4x4 16x16 ,每種模式下面的預測模式。
幀間預測,像素塊的預測參考已經編碼事後的圖像幀,理論依據是圖像時間域變化是緩慢的,運動不劇烈。相鄰時間的圖像之間存在很大的類似性,圖像之間通常能夠用簡單的平移運動建模。
幀間預測的內容主要包括,參考幀選擇,MV 搜索,以及幀間預測分塊模式選擇。
變換 / 量化 / 熵編碼,預測後的殘差通過變換以後,像素殘差大多數能量都集中低頻部分,高頻部分的能量不多,量化以後的信息,進行無損熵編碼傳輸。
下面舉例說明,量化係數的影響,通常認爲量化是形成有損的惟一部分,其餘部分理論上都是無損的。
量化參數影響了編碼的模式抉擇,壓縮率,以及失真率,編碼器的碼率控制,控制的就是這個量化參數值,量化參數有個範圍在0~51。
可見,視頻編碼壓縮是有極限的,不可能隨意到多少,量化參數值越高,碼率越低,失真越大,人眼的不敏感,或者說冗餘,當QP>20的時候,壓縮以後的主管質量和10是沒有什麼差別的。咱們必定要選擇一個最合適的qp值達到壓縮率高視頻主管質量也好的效果。
直播中視頻編碼策略
提升編碼效率
實時應用場景中咱們首先要關注的就是編碼效率問題,所謂編碼效率,即壓縮一幀視頻(一幅圖像)的所須要的時間,咱們能夠經過下面幾個點去提升編碼效率。
提升編碼壓縮率
在保障編碼效率基礎上,儘量的提升編碼壓縮率,對視頻原始信息進行降噪處理,低通濾波去處沒必要要的噪音干擾;咱們須要更多從分析視頻語義角度出發,譬如感興趣區域編碼。
提升編碼魯棒性
編碼器端能夠採用分片編碼,包括FMO技術,咱們的熵編碼是以片爲單元,不管是CAVLC,仍是CABAC都是串行的,一旦發生誤碼,將會影響後序全部熵解碼,可是片分的更多,下降了編碼的壓縮率,都是權衡,有些應用場景一行爲一個編碼片。
將編碼以後的信息,分紅不一樣的優先級打包,譬如講將mv,mbtype等重要信息,分紅一個數據塊,將殘差信息分紅另外一個數據塊,這樣能夠在丟包網絡中,儘可能保障重要信息的完整接收。
解碼器端,能夠採用錯誤恢復手段,儘量的在已經接收的信息基礎上,儘可能恢復出丟失的信息量,達到主觀上的不易察覺。
下期預告
時間:2016年12月7日 晚8點
方式:線上微信羣
主題:全球雲計算資源一體化整合實戰
講師:陳震,迅達雲成運維總監
報名請關注極牛(ji-niu)並回復技術分享。