本書系統講解了基于FFmpeg二次開發視頻監控系統,并結合ONVIF和GB/T28181的基礎理論及應用,包括使用FFmpeg讀取攝像頭數據、使用Lib264/Libx265進行視頻編碼、結合Qt和SDL2進行視頻渲染等功能;也包括ONVIF和GB/T28181協議的應用,以及SIP、SOAP等相關協議及開源庫的具體應用。
全書共11章:系統講解了FFmpeg二次開發視頻監控系統的基礎知識及項目應用、Lib264/Libx265編碼流程及應用、ONVIF協議的原理及應用、GB/T28181協議的原理及應用及開源的國標GB/T28181視頻平臺等。
書中包含大量的示例,圖文并茂,爭取讓音視頻流媒體領域的讀者真正入門,從此開啟流媒體直播編程的大門。本書知識體系比較完整,側重于使用FFmpeg二次開發視頻監控系統,結合ONVIF和GB/T28181協議實現真實的項目應用。建議讀者先學習FFmpeg音視頻流媒體系列的前5部,然后來學習本書。本書的講解過程由淺入深,讓讀者在不知不覺中學會了FFmpeg二次開發視頻監控系統,并能動手實現各種編解碼功能,結合ONVIF和GB/T28181協議實現視頻對接等功能。
本書可作為FFmpeg二次開發、ONVIF協議及GB/T28181方向的入門書籍,也可作為高年級本科生和研究生的學習參考書籍。
易教易學 系統闡述RTSP、SOAP、SIP、ONVIF和GB/T28181等協議,講解FFmpeg核心數據結構及視頻監控的項目應用,結合前沿的技術,使讀者在不知不覺中已經建立起宏觀的音視頻流媒體知識體系,掌握晦澀難懂的概念和理論,實踐并應用FFmpeg的API實現IPC實時流媒體視頻監控功能,為后續的FFmpeg深入應用開發打下堅實的基礎。
前后銜接 強調知識體系和分析方法的前后連貫性,并妥善處理好與前期知識和后續知識的銜接。
開拓思維 引導讀者進行各種流媒體協議如RTSP、SOAP、SIP、ONVIF和GB/T28181等,以及FFmpeg視頻監控應用功能的探索,幫助讀者打開思維,激發讀者的學習興趣,啟迪創新思想,包括但不限于各種協議的詳細分析、各種開源庫的項目應用及實現技巧、FFmpeg二次開發視頻監控的技術細節,以及開源GB/T28181國標平臺案例應用等。
近年來,隨著5G網絡技術的迅猛發展,FFmpeg音視頻及流媒體直播應用越來越普及,音視頻流媒體方面的開發崗位也非常多。然而,市面上卻沒有一本通俗易懂又系統完整的FFmpeg 二次開發視頻監控系統的入門書,網絡上的知識雖然不少,但是太散亂,不合適讀者入門。
眾所周知,FFmpeg命令行應用起來簡單,但SDK二次開發相對難以理解。很多程序員想從事音視頻或流媒體開發,但始終糊里糊涂、不得入門。筆者剛畢業時,也是純讀者一個,付出了艱苦的努力,終于有一些收獲。借此機會,筆者將相關內容整理成專業書籍,希望給讀者帶來幫助,少走彎路。
FFmpeg發展迅猛,功能強大,命令行也很簡單、很實用,但是有一個現象:即便使用命令行實現了一些特效,但依然不理解原理,不知道具體的參數是什么含義。音視頻與流媒體是一門很復雜的技術,涉及的概念、原理、理論非常多,很多初學者不學基礎理論,而是直接做項目、看源碼,但往往在看到C/C 的代碼時一頭霧水,不知道代碼到底是什么意思。這是因為沒有學習音視頻和流媒體的基礎理論,就像學習英語,不學習基本單詞,而是天天聽英語新聞,總也聽不懂,所以一定要認真學習基礎理論,然后學習播放器、轉碼器、流媒體直播、視頻監控等。
本系列的前5本書為《FFmpeg入門詳細講解音視頻原理及應用》《FFmpeg入門詳細講解流媒體直播原理及應用》《FFmpeg入門詳細講解命令行及音視頻特效原理及應用》《FFmpeg入門詳細講解SDK二次開發及直播美顏原理及應用》《FFmpeg入門詳解音視頻流媒體播放器原理及應用》。這6本書由淺入深,圍繞FFmpeg原理及應用,層層展開,系統講解了音視頻、流媒體和直播的基礎原理; 詳細講解了FFmpeg的命令行和SDK應用,手把手地帶領讀者進行常用命令行的應用和原理解析,并深入介紹核心API的參數及應用場景; 重點介紹音視頻同步等關鍵技術,引領讀者開發一款通用的音視頻和流媒體播放器。最后,本書以視頻監控為切入點,綜合相關的知識點在監控的同時進行H.264/H.265編碼,并存儲到本地,形成一個完整的基于音視頻流媒體的視頻監控項目。
閱讀建議
本書是一本適合讀者入門的FFmpeg二次開發視頻監控的書籍,既有通俗易懂的基本概念,又有豐富的案例和原理分析,圖文并茂,知識體系非常完善。本書首先對音視頻、流媒體和直播的基本概念和原理進行復習,對重要的概念進行具體闡述,然后結合FFmpeg的SDK進行案例實戰,讀者既能學到實踐操作知識,也能理解底層理論,非常適合初學者。建議讀者先學習FFmpeg音視頻流媒體系列的前5本,然后學習本書。
本書第1~5章介紹FFmpeg基礎架構及二次開發視頻監控客戶端,第6~11章介紹ONVIF、SIP、SOAP和GB/T 28181等協議及具體的案例應用。
建議讀者在學習過程中,循序漸進,不要跳躍。本書的知識體系是筆者精心準備的,由淺入深,層層深入,對于抽象復雜的概念和原理,筆者盡量通過圖文并茂的方式進行講解,非常適合初學者。本書從最基礎的FFmpeg 二次開發讀取攝像頭案例開始,理論與實踐并重,讀者一定要動手實踐,親自試驗各個案例,并理解原理和流程。然后講解詳細的ONVIF、SIP、SOAP和GB/T 28181等協議,并應用到具體的案例中,爭取每個案例都能將知識點活學活用。建議讀者一定要將本系列的前幾本所學的音視頻基礎知識和流媒體直播基礎知識應用到本書中,理論指導實踐,加深對每個知識點的理解。讀者不但要會用FFmpeg的SDK來完成視頻監控功能,還要能理解底層原理及相關的理論基礎。最后進行分析總結,爭取對所學的理論進行升華,做到融會貫通。
掃描目錄上方的二維碼可下載本書配套資源。
致謝
首先感謝清華大學出版社趙佳霓編輯給筆者提出了許多寶貴的建議,以及推動了本書出版。感謝我的家人和親朋好友,祝大家每天快樂健康。
感謝我的學員,群里的學員越來越多,并經常提出很多寶貴意見。隨著培訓時間和經驗的增長,對知識點的理解也越來越透徹,希望給大家多帶來一些光明,盡量讓大家少走彎路。已經有群里的老學員通過學到的FFmpeg音視頻流媒體知識獲得了50萬元的年薪,這一點讓我感到非常欣慰。活到老、學到老,學習是一個過程,沒有終點,唯有堅持,大家一起加油,為美好的明天而奮斗。
由于時間倉促,書中難免存在不妥之處,請讀者見諒并提出寶貴意見。
梅會東
2024年4月于北京清華園
第1章流媒體與RTSP/RTP/RTCP簡介
1.1流媒體簡介
1.2RTSP簡介
1.2.1RTSP支持
1.2.2RTSP特點
1.3RTSP交互流程
1.4RTSP重要概念
1.4.1集合控制
1.4.2實體
1.4.3容器文件
1.4.4RTSP會話
1.4.5RTSP參數
1.4.6RTSP信息
1.4.7RTSP連接
1.4.8RTSP擴展
1.4.9RTSP操作模式
1.5RTSP重要方法
1.6RTP簡介
1.6.1RTP格式
1.6.2RTP的會話過程
1.7RTCP簡介
1.7.1RTCP的5種分組類型
1.7.2RTCP包結構
第2章VLC及FFplay流媒體播放器
2.1VLC播放器簡介
2.1.1VLC播放器
2.1.2VLC的功能列表
2.1.3VLC播放網絡串流
2.1.4VLC作為流媒體服務器
2.1.5使用Wireshark抓包分析RTSP交互流程
2.2FFplay播放原理簡介
2.2.1視頻播放器簡介
2.2.2FFmpeg播放架構與原理
第3章FFmpeg二次開發采集并預覽本地攝像頭
3.1FFmpeg的命令行方式處理攝像頭
3.2FFmpeg的SDK方式讀取本地攝像頭
3.3FFmpeg SDL2讀取并顯示本地攝像頭
3.3.1SDL2簡介
3.3.2VS 2015搭建SDL2開發環境
3.3.3Qt 5.9平臺搭建SDL2開發環境
3.3.4Linux平臺搭建SDL2開發環境
3.3.5SDL2播放YUV視頻文件
3.3.6使用FFmpeg SDL2讀取本地攝像頭并渲染
3.4FFmpeg Qt讀取并顯示本地攝像頭
3.4.1信號
3.4.2槽
3.4.3信號與槽的關聯
3.4.4信號與槽的注意事項
3.4.5元對象工具
3.4.6案例:標準信號槽
3.4.7案例:自定義信號槽
3.4.8Qt顯示圖像
3.4.9Qt縮放圖像
3.4.10Qt旋轉圖像
第4章H.264/H.265視頻編碼并存儲
4.1FFmpeg命令行編碼H.264
4.1.1YUV編碼為H.264
4.1.2控制視頻的碼率及分辨率
4.1.3控制視頻的GOP
4.2libx264的常用編碼選項簡介
4.2.1FFmpeg中libx264的選項
4.2.2x264.exe中的選項名與選項值
4.3libx265的常用編碼選項簡介
4.4編解碼原理流程及API解析
4.4.1視頻解碼過程簡介
4.4.2視頻解碼流程及主要API
4.4.3視頻編碼過程簡介
4.4.4視頻編碼流程及主要API
4.5FFmpeg編程流程與案例實戰
4.5.1案例:使用FFmpeg將YUV編碼為H.264
4.5.2AVFrame及相關API
4.5.3案例:使用FFmpeg將YUV編碼為H.264并封裝為MP4
4.5.4案例:使用FFmpeg將H.264碼流封裝為MP4
4.6FFmpeg編解碼與時間基詳解
4.6.1GOP與PTS/DTS
4.6.2FFmpeg中的時間基與時間戳
4.6.3轉封裝過程中的時間基轉換
4.6.4轉碼過程中的時間基轉換
第5章FFmpeg二次開發IPC視頻監控
5.1視頻監控系統簡介
5.1.1視頻監控系統的功能及特點
5.1.2視頻監控系統的工作原理及結構
5.1.3視頻監控系統的總體結構設計
5.1.4視頻監控系統的存儲結構設計
5.2FFmpeg讀取網絡攝像頭
5.3FFmpeg實現H.264/H.265編碼的C 類封裝
第6章SOAP及gSOAP實戰
6.1SOAP簡介
6.1.1RPC簡介
6.1.2HTTP簡介
6.1.3XML簡介
6.1.4WSDL簡介
6.1.5SOAP簡介
6.1.6Web Service簡介
6.2gSOAP簡介
6.2.1soapcpp2的用法
6.2.2wsdl2h的用法
6.2.3CentOS編譯并測試gSOAP
6.2.4Ubuntu編譯gSOAP
6.2.5VS利用gSOAP開發Web Service客戶端
第7章ONVIF協議原理解析
7.1ONVIF簡介
7.1.1ONVIF背景簡介
7.1.2ONVIF的技術框架
7.1.3ONVIF規范
7.1.4ONVIF Profile
7.1.5ONVIF應用
7.1.6ONVIF測試工具
7.1.7ONVIF開發IPC的流程
7.2ONVIF功能概述
7.2.1概念定義
7.2.2縮寫
7.2.3Web服務
7.2.4設備發現
7.2.5設備類型
7.2.6設備管理
7.2.7設備輸入/輸出
7.2.8圖像配置
7.2.9媒體配置
7.2.10實時流
7.2.11事件處理
7.2.12PTZ控制
7.2.13視頻分析
7.2.14分析設備
7.2.15顯示
7.2.16接收器
7.2.17存儲
第8章ONVIF框架代碼案例應用
8.1Windows系統下生成ONVIF框架代碼
8.1.1下載WSDL文件
8.1.2新建工作空間
8.1.3修改typemap.dat
8.1.4生成onvif.h文件
8.1.5鑒權(認證)
8.1.6正式生成框架代碼
8.1.7關聯自己的命名空間
8.1.8提取需要的文件
8.2ONVIF設備搜索
8.2.1WSDiscovery原理
8.2.2單播、多播(組播)和廣播
8.2.3設備搜索
8.3獲取設備基本信息
8.4鑒權(認證)
8.5讀取音視頻流
8.6圖像抓拍
8.7修改分辨率
8.8Linux下生成ONVIF框架代碼
8.8.1安裝依賴項
8.8.2下載gSOAP2.8.116的源碼
8.8.3編譯gSOAP2.8.116
8.8.4修改typemap.dat
8.8.5生成onvif.h頭文件
8.8.6鑒權(認證)
8.8.7根據頭文件產生框架代碼
8.8.8復制其他文件
8.8.9關聯自己的命名空間
8.8.10代碼封裝
8.8.11設備查找的案例代碼
第9章SIP及eXosip開源庫應用
9.1SIP簡介
9.1.1SIP的功能
9.1.2SIP的實現機制
9.1.3SIP的特征及元素
9.1.4SIP會話構成
9.1.5SIP通信流程及消息
9.1.6H.323協議和SIP的比較
9.1.7SIP與SDP
9.1.8SIP工作流程
9.1.9SIP超時機制
9.2eXosip開源庫簡介
9.2.1oSIP及eXosip簡介
9.2.2Windows系統下編譯oSIP2和eXosip2
9.2.3Ubuntu下編譯oSIP2和eXosip2
9.2.4案例:UAS和UAC入門
9.2.5oSIP的重要數據結構
9.2.6oSIP的初始化工作
9.2.7oSIP收發消息機制
9.2.8oSIP管理事務及會話
9.2.9eXosip協議棧簡介
第10章GB/T 28181協議原理
10.1協議簡介
10.2術語、定義和縮略語
10.2.1術語和定義
10.2.2縮略語
10.3互聯結構
10.3.1SIP監控域互聯結構
10.3.2SIP監控域與非SIP監控域互聯結構
10.3.3聯網系統通信協議結構
10.4傳輸要求
10.5交換要求
10.5.1統一編碼規則
10.5.2媒體壓縮編解碼
10.5.3媒體存儲封裝格式
10.5.4SDP定義
10.5.5網絡傳輸協議的轉換
10.5.6控制協議的轉換
10.5.7媒體傳輸協議的轉換
10.5.8媒體數據格式的轉換
10.5.9與其他系統的數據交換
10.5.10信令字符集
10.6控制要求
10.7傳輸、交換、控制安全性要求
10.8控制、傳輸流程和協議接口
10.8.1注冊和注銷
10.8.2實時視音頻點播
10.8.3設備控制
10.8.4報警事件通知和分發
10.8.5設備信息查詢
10.8.6狀態信息報送
10.8.7歷史視音頻文件檢索
10.8.8歷史視音頻回放
10.8.9歷史視音頻文件下載
10.8.10網絡校時
10.8.11訂閱和通知
10.8.12語音廣播和語音對講
第11章GB/T 28181國標平臺案例應用
11.1國標平臺簡介
11.1.1國標平臺的組成
11.1.2國標平臺的組網及特點
11.2LiveGBS平臺簡介
11.2.1LiveGBS的服務架構
11.2.2LiveCMS的配置文件
11.2.3LiveSMS的配置文件
11.2.4LiveSMS的運行
11.2.5配置設備接入
11.2.6平臺管理
11.3EasyGBS平臺簡介
11.3.1運行軟件
11.3.2設備接入
11.3.3平臺管理
11.3.4平臺應用案例
11.4GB/T 28181抓包流程分析