本書聚焦于使用英特爾的GPU來進行視頻加速處理的方案。首先介紹視頻處理的理論基礎,然后介紹英特爾的GPU處理器架構,接著介紹英特爾推薦的視頻處理開發(fā)套件Media SDK的環(huán)境搭建、框架和功能支持,以及開源框架的環(huán)境如何在英特爾的平臺上搭建等。接下來是實戰(zhàn)的部分,首先介紹視頻處理中的兩個技術難點——內容管理和碼率控制,接下來是編程實戰(zhàn),并針對開發(fā)者反饋較多的情況,介紹性能評測和性能優(yōu)化的部分以及視頻會議中視頻處理的應用。
本書面向的讀者為視頻行業(yè)的廣大從業(yè)人員,不管是新進入這個行業(yè)的開發(fā)小白,還是眾多戰(zhàn)斗在第一線的銷售、售前工程師以及現場工程師等,甚至是具有數十年工作經驗的資深軟硬件開發(fā)人員,都可以從本書獲益。
PREFACE
前 言
隨著科技和網絡的蓬勃發(fā)展,視頻作為主要的信息載體,應用場景越來越多——從傳統(tǒng)的電視電影到現在的在線視頻服務,從點播到直播,從單向接收到實時互動。同時,隨著屏幕越來越清晰,尺寸越來越大,對視頻的尺寸、清晰度等的要求變得越來越高,這也對硬件的算力提出了越來越高的要求。作為計算平臺的主要硬件供應商,英特爾提供了多款能夠加速處理復雜視頻應用的硬件平臺,例如,性價比合適的集成顯卡、可插拔的獨立顯卡、性能強悍并且可擴展的服務器處理器、可實現客戶定制化的FPGA芯片等。GPU架構的快速發(fā)展,特別是英特爾GPU內集成了很多專用的低功耗視頻數據處理模塊,使其具有很強的視頻加速處理能力。雖然國內也有很多開發(fā)者使用英特爾GPU,然而沒有相關書籍來系統(tǒng)梳理這部分知識。因此,本書將聚焦于使用英特爾的GPU來進行視頻加速處理的方案。
本書將從視頻數據的理論基礎、硬件基礎、軟件接口、實戰(zhàn)等方面進行介紹。首先深入淺出地介紹一些大家耳熟能詳的數字圖像的基本概念;然后介紹數字圖像壓縮的理論基礎和評價方法,以及現在常用的一些視頻編碼的標準格式;接下來介紹英特爾GPU的架構特點,因為它集成了專用的多媒體處理模塊,具備高效、低功耗的視頻加速處理能力;再接下來詳細介紹相關軟件組件的設計原理以及環(huán)境搭建過程等,這些組件包括免費開源的視頻處理開發(fā)套件Media SDK、基于Media SDK和OpenVINO實現的高并發(fā)視頻分析業(yè)務評估工具(SVET),以及業(yè)界常用的視頻開源框架FFmpeg、GStreamer和OpenCV等。由于視頻處理加速在嵌入式環(huán)境的廣泛應用,我們在第5章詳細介紹了Linux系統(tǒng)下對應的軟件棧,對開發(fā)者比較關心的DRM框架、i915驅動、VA-API、GmmLib的核心知識做了梳理。這些軟件接口各有所長,面向的應用也千差萬別,但是底層都可以通過英特爾的驅動調用英特爾的GPU來進行視頻加速處理,所以,讀者可以根據自身項目的需求有選擇地閱讀。在介紹完硬件架構和軟件接口之后,就開始進行實戰(zhàn)技巧的介紹,主要包括視頻編解碼處理、拼接顯示、性能監(jiān)測、性能驗證和優(yōu)化等,并配有命令行以及參考代碼。相信這種介紹方法能夠幫助讀者少走彎路,節(jié)省開發(fā)成本,起到事半功倍的作用。
本書各章的具體寫作分工為:
第1章 視頻處理之理論基礎:林森
第2章 英特爾GPU概述:林森,傅偉
第3章 Media SDK總覽:林森,唐君
第4章 Media SDK環(huán)境搭建:唐君,葉釗,林森,王丹
第5章 Linux視頻加速軟件框架:唐君
第6章 開源框架的使用和環(huán)境搭建:葉釗,黃妍
第7章 高并發(fā)視頻分析業(yè)務評估工具:王丹
第8章 編解碼實現:林森,傅巧妮,王丹,唐君
第9章 拼接顯示實現:傅巧妮,唐君,林森
第10章 性能監(jiān)測:唐君,林森
第11章 性能驗證和優(yōu)化:唐君,林森
附錄A~附錄D:林森
本書面向的讀者為視頻行業(yè)的廣大從業(yè)人員,不管是新進入這個行業(yè)的開發(fā)小白,還是眾多戰(zhàn)斗在第一線的銷售、售前工程師以及現場工程師等,甚至是具有數十年工作經驗的資深軟硬件開發(fā)人員,都可以通過本書了解英特爾GPU的架構、能力、特點以及開發(fā)框架等,并找到解決實際問題的方法和思路,快捷地研發(fā)出有特點的視頻產品。
另外,本書介紹的是最基本的視頻圖像處理的理論知識,不會涉及高深的數學知識和最前沿的理論算法,因為本書面向的是那些想要把視頻處理技術做成可以落地的項目的從業(yè)者和開發(fā)者。當然有很多講述理論的書,想要深入學習視頻編解碼知識的讀者可以參考《數字視頻編碼技術原理(第二版)》(由高文、趙德斌、馬思偉所著)等。盡管本書的很多案例都基于英特爾GPU平臺,但是很多視頻加速處理的思想是相通的,致力于視頻處理開發(fā)的讀者也可以把本書作為入門類書籍參考。
在整本書的描述過程中,我們希望盡可能地把想要表述的觀點通俗易懂地表達出來。眾所周知,很多技術類的書籍常常因為技術本身比較復雜而讓讀者感到晦澀難懂,我們希望通過我們的經驗幫助讀者少走一些彎路,從而降低開發(fā)的難度。同時,因為在視頻技術行業(yè)里大家對某些英文單詞已經形成了基本認知,如果直接翻譯成中文會給廣大讀者造成困擾,所以我們在描述過程中會把某些專業(yè)名詞對應的英文放到括號內,以便把概念介紹得更加明確,易于閱讀和理解。
本書從開始構思到最后成書歷時三年多,大家都是利用業(yè)余時間參與編寫工作的,這里要特別感謝陳婧在本書的編寫過程中給予大力支持,在大家堅持不下去的時候,她一直在出謀劃策,鼓勵和推動著大家前進,非常感謝!
最后由于大家的能力和精力有限,書中還有很多問題沒有來得及仔細鉆研,在描述和實現上也有很大的局限性,希望得到大家的理解和支持,歡迎提出寶貴的意見和建議。
CONTENTS
目 錄
序
前言
第1章 視頻處理之理論基礎1
1.1 人眼視覺系統(tǒng)概述1
1.2 RGB和YUV色彩空間模型3
1.2.1 RGB色彩空間模型5
1.2.2 YUV色彩空間模型5
1.2.3 YUV色彩模型與RGB
色彩模型的轉換6
1.3 數字圖像概述7
1.3.1 數字化過程——采樣7
1.3.2 幀和場8
1.3.3 視頻圖像屬性9
1.4 傳統(tǒng)視頻壓縮技術理論和
算法概述10
1.4.1 信息論概述11
1.4.2 視頻數據的冗余特性14
1.4.3 變換技術15
1.4.4 量化技術18
1.4.5 預測技術20
1.4.6 Z字形掃描22
1.4.7 熵編碼23
1.4.8 可分層編碼23
1.4.9 多視點視頻編碼25
1.5 常見視頻圖像處理算法27
1.5.1 去隔行掃描27
1.5.2 幀率轉換28
1.5.3 電視電影刷新率轉換28
1.5.4 縮放29
1.6 視頻行業(yè)主要標準30
1.6.1 電視制式31
1.6.2 視頻圖像標準32
1.6.3 視頻編解碼行業(yè)標準33
1.7 視頻圖像質量評價36
1.7.1 主觀質量評價37
1.7.2 客觀質量評價37
1.8 本章小結39
第2章 英特爾GPU概述41
2.1 英特爾GPU處理器架構概述42
2.2 視頻引擎46
2.3 英特爾GPU路線圖和命名49
2.4 本章小結52
第3章 Media SDK總覽53
3.1 處理對象54
3.2 功能模塊55
3.3 API設計56
3.4 軟件架構57
3.4.1 會話57
3.4.2 分配器59
3.4.3 數據緩存61
3.4.4 異步流水線62
3.5 例程和教程概述64
3.5.1 基本開發(fā)流程64
3.5.2 解碼過程65
3.5.3 編碼過程66
3.5.4 轉碼過程67
3.5.5 視頻圖像處理68
3.5.6 例程的使用70
3.6 新一代開發(fā)套件OneVPL71
3.7 本章小結75
第4章 Media SDK環(huán)境搭建77
4.1 Linux環(huán)境搭建77
4.1.1 選擇內核版本77
4.1.2 選擇Media SDK版本78
4.1.3 安裝依賴庫和例程79
4.1.4 通過vainfo驗證安裝
結果80
4.2 Windows環(huán)境搭建85
4.2.1 開發(fā)環(huán)境部署85
4.2.2 例程編譯過程87
4.2.3 基于GitHub的例程編譯
過程92
4.2.4 查看當前平臺的視頻處理
能力92
4.2.5 自帶Tracer工具92
4.3 本章小結94
第5章 Linux視頻加速軟件框架95
5.1 直接渲染管理器97
5.1.1 內存管理98
5.1.2 命令提交107
5.1.3 模式設置115
5.1.4 權限管理116
5.2 libdrm117
5.3 VA-API117
5.3.1 核心概念119
5.3.2 編程流程124
5.3.3 示例程序125
5.3.4 調試129
5.4 GmmLib132
5.5 本章小結133
第6章 開源框架的使用和環(huán)境
搭建134
6.1 FFmpeg134
6.1.1 Linux編譯指南136
6.1.2 Windows編譯指南138
6.2 GStreamer141
6.2.1 基于GStreamer官網的
編譯指南141
6.2.2 通過Intel OpenVINO
安裝GStreamer143
6.2.3 GStreamer與AI的協(xié)同
工作146
6.3 OpenCV151
6.3.1 Linux編譯指南152
6.3.2 Windows編譯指南154
6.4 本章小結158
第7章 高并發(fā)視頻分析業(yè)務
評估工具159
7.1 綜述159
7.2 Linux 環(huán)境搭建160
7.2.1 安裝依賴軟件包160
7.2.2 升級Linux 內核161
7.2.3 安裝集成顯卡固件162
7.2.4 安裝OpenVINO162
7.2.5 安裝OpenCL驅動163
7.2.6 準備測試的視頻165
7.2.7 運行SVET程序165
7.2.8 SVET參考程序參數
配置167
7.3 Windows環(huán)境搭建168
7.3.1 安裝依賴軟件包168
7.3.2 編譯SVET參考程序和
依賴庫170
7.3.3 下載推理所需模型和
測試視頻175
7.3.4 運行多路視頻推理176
7.4 核心視頻業(yè)務179
7.4.1 NVR業(yè)務180
7.4.2 AI視頻分析業(yè)務181
7.4.3 MCU轉碼拼接業(yè)務185
7.5 本章小結187
第8章 編解碼實現188
8.1 低功耗快速編碼188
8.2 低延遲編解碼192
8.3 碼率控制194
8.3.1 恒定量化系數算法195
8.3.2 恒定碼率算法和可變
碼率算法196
8.3.3 前向預測算法199
8.3.4 智能恒定質量算法201
8.3.5 質量可定義的可變碼
率算法202
8.4 動態(tài)碼率控制202
8.5 精確控制每一幀圖像編碼的
量化系數203
8.6 多個IDR幀視頻流的解碼過程205
8.7 強制生成關鍵幀206
8.8 參考幀的動態(tài)選擇206
8.9 參考幀添加重復信息207
8.10 長期參考幀208
8.11 可分層視頻編碼例程實現209
8.12 本章小結211
第9章 拼接顯示實現212
9