近年來,隨著5G網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,F(xiàn)Fmpeg音視頻及流媒體直播應(yīng)用越來越普及,音視頻流媒體方面的開發(fā)崗位也非常多。然而,市面上卻沒有一本通俗易懂又系統(tǒng)完整的FFmpeg 二次開發(fā)視頻監(jiān)控系統(tǒng)的入門書,網(wǎng)絡(luò)上的知識雖然不少,但是太散亂,不合適讀者入門。
眾所周知,F(xiàn)Fmpeg命令行應(yīng)用起來簡單,但SDK二次開發(fā)相對難以理解。很多程序員想從事音視頻或流媒體開發(fā),但始終糊里糊涂、不得入門。筆者剛畢業(yè)時,也是純讀者一個,付出了艱苦的努力,終于有一些收獲。借此機會,筆者將相關(guān)內(nèi)容整理成專業(yè)書籍,希望給讀者帶來幫助,少走彎路。
FFmpeg發(fā)展迅猛,功能強大,命令行也很簡單、很實用,但是有一個現(xiàn)象:即便使用命令行實現(xiàn)了一些特效,但依然不理解原理,不知道具體的參數(shù)是什么含義。音視頻與流媒體是一門很復(fù)雜的技術(shù),涉及的概念、原理、理論非常多,很多初學(xué)者不學(xué)基礎(chǔ)理論,而是直接做項目、看源碼,但往往在看到C/C 的代碼時一頭霧水,不知道代碼到底是什么意思。這是因為沒有學(xué)習(xí)音視頻和流媒體的基礎(chǔ)理論,就像學(xué)習(xí)英語,不學(xué)習(xí)基本單詞,而是天天聽英語新聞,總也聽不懂,所以一定要認(rèn)真學(xué)習(xí)基礎(chǔ)理論,然后學(xué)習(xí)播放器、轉(zhuǎn)碼器、流媒體直播、視頻監(jiān)控等。
本系列的前5本書為《FFmpeg入門詳細(xì)講解音視頻原理及應(yīng)用》《FFmpeg入門詳細(xì)講解流媒體直播原理及應(yīng)用》《FFmpeg入門詳細(xì)講解命令行及音視頻特效原理及應(yīng)用》《FFmpeg入門詳細(xì)講解SDK二次開發(fā)及直播美顏原理及應(yīng)用》《FFmpeg入門詳解音視頻流媒體播放器原理及應(yīng)用》。這6本書由淺入深,圍繞FFmpeg原理及應(yīng)用,層層展開,系統(tǒng)講解了音視頻、流媒體和直播的基礎(chǔ)原理; 詳細(xì)講解了FFmpeg的命令行和SDK應(yīng)用,手把手地帶領(lǐng)讀者進(jìn)行常用命令行的應(yīng)用和原理解析,并深入介紹核心API的參數(shù)及應(yīng)用場景; 重點介紹音視頻同步等關(guān)鍵技術(shù),引領(lǐng)讀者開發(fā)一款通用的音視頻和流媒體播放器。最后,本書以視頻監(jiān)控為切入點,綜合相關(guān)的知識點在監(jiān)控的同時進(jìn)行H.264/H.265編碼,并存儲到本地,形成一個完整的基于音視頻流媒體的視頻監(jiān)控項目。
閱讀建議
本書是一本適合讀者入門的FFmpeg二次開發(fā)視頻監(jiān)控的書籍,既有通俗易懂的基本概念,又有豐富的案例和原理分析,圖文并茂,知識體系非常完善。本書首先對音視頻、流媒體和直播的基本概念和原理進(jìn)行復(fù)習(xí),對重要的概念進(jìn)行具體闡述,然后結(jié)合FFmpeg的SDK進(jìn)行案例實戰(zhàn),讀者既能學(xué)到實踐操作知識,也能理解底層理論,非常適合初學(xué)者。建議讀者先學(xué)習(xí)FFmpeg音視頻流媒體系列的前5本,然后學(xué)習(xí)本書。
本書第1~5章介紹FFmpeg基礎(chǔ)架構(gòu)及二次開發(fā)視頻監(jiān)控客戶端,第6~11章介紹ONVIF、SIP、SOAP和GB/T 28181等協(xié)議及具體的案例應(yīng)用。
建議讀者在學(xué)習(xí)過程中,循序漸進(jìn),不要跳躍。本書的知識體系是筆者精心準(zhǔn)備的,由淺入深,層層深入,對于抽象復(fù)雜的概念和原理,筆者盡量通過圖文并茂的方式進(jìn)行講解,非常適合初學(xué)者。本書從最基礎(chǔ)的FFmpeg 二次開發(fā)讀取攝像頭案例開始,理論與實踐并重,讀者一定要動手實踐,親自試驗各個案例,并理解原理和流程。然后講解詳細(xì)的ONVIF、SIP、SOAP和GB/T 28181等協(xié)議,并應(yīng)用到具體的案例中,爭取每個案例都能將知識點活學(xué)活用。建議讀者一定要將本系列的前幾本所學(xué)的音視頻基礎(chǔ)知識和流媒體直播基礎(chǔ)知識應(yīng)用到本書中,理論指導(dǎo)實踐,加深對每個知識點的理解。讀者不但要會用FFmpeg的SDK來完成視頻監(jiān)控功能,還要能理解底層原理及相關(guān)的理論基礎(chǔ)。最后進(jìn)行分析總結(jié),爭取對所學(xué)的理論進(jìn)行升華,做到融會貫通。
掃描目錄上方的二維碼可下載本書配套資源。
致謝
首先感謝清華大學(xué)出版社趙佳霓編輯給筆者提出了許多寶貴的建議,以及推動了本書出版。感謝我的家人和親朋好友,祝大家每天快樂健康。
感謝我的學(xué)員,群里的學(xué)員越來越多,并經(jīng)常提出很多寶貴意見。隨著培訓(xùn)時間和經(jīng)驗的增長,對知識點的理解也越來越透徹,希望給大家多帶來一些光明,盡量讓大家少走彎路。已經(jīng)有群里的老學(xué)員通過學(xué)到的FFmpeg音視頻流媒體知識獲得了50萬元的年薪,這一點讓我感到非常欣慰;畹嚼稀W(xué)到老,學(xué)習(xí)是一個過程,沒有終點,唯有堅持,大家一起加油,為美好的明天而奮斗。
由于時間倉促,書中難免存在不妥之處,請讀者見諒并提出寶貴意見。
梅會東
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參數(shù)
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包結(jié)構(gòu)
第2章VLC及FFplay流媒體播放器
2.1VLC播放器簡介
2.1.1VLC播放器
2.1.2VLC的功能列表
2.1.3VLC播放網(wǎng)絡(luò)串流
2.1.4VLC作為流媒體服務(wù)器
2.1.5使用Wireshark抓包分析RTSP交互流程
2.2FFplay播放原理簡介
2.2.1視頻播放器簡介
2.2.2FFmpeg播放架構(gòu)與原理
第3章FFmpeg二次開發(fā)采集并預(yù)覽本地攝像頭
3.1FFmpeg的命令行方式處理攝像頭
3.2FFmpeg的SDK方式讀取本地攝像頭
3.3FFmpeg SDL2讀取并顯示本地攝像頭
3.3.1SDL2簡介
3.3.2VS 2015搭建SDL2開發(fā)環(huán)境
3.3.3Qt 5.9平臺搭建SDL2開發(fā)環(huán)境
3.3.4Linux平臺搭建SDL2開發(fā)環(huán)境
3.3.5SDL2播放YUV視頻文件
3.3.6使用FFmpeg SDL2讀取本地攝像頭并渲染
3.4FFmpeg Qt讀取并顯示本地攝像頭
3.4.1信號
3.4.2槽
3.4.3信號與槽的關(guān)聯(lián)
3.4.4信號與槽的注意事項
3.4.5元對象工具
3.4.6案例:標(biāo)準(zhǔn)信號槽
3.4.7案例:自定義信號槽
3.4.8Qt顯示圖像
3.4.9Qt縮放圖像
3.4.10Qt旋轉(zhuǎn)圖像
第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中l(wèi)ibx264的選項
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編程流程與案例實戰(zhàn)
4.5.1案例:使用FFmpeg將YUV編碼為H.264
4.5.2AVFrame及相關(guān)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轉(zhuǎn)封裝過程中的時間基轉(zhuǎn)換
4.6.4轉(zhuǎn)碼過程中的時間基轉(zhuǎn)換
第5章FFmpeg二次開發(fā)IPC視頻監(jiān)控
5.1視頻監(jiān)控系統(tǒng)簡介
5.1.1視頻監(jiān)控系統(tǒng)的功能及特點
5.1.2視頻監(jiān)控系統(tǒng)的工作原理及結(jié)構(gòu)
5.1.3視頻監(jiān)控系統(tǒng)的總體結(jié)構(gòu)設(shè)計
5.1.4視頻監(jiān)控系統(tǒng)的存儲結(jié)構(gòu)設(shè)計
5.2FFmpeg讀取網(wǎng)絡(luò)攝像頭
5.3FFmpeg實現(xiàn)H.264/H.265編碼的C 類封裝
第6章SOAP及gSOAP實戰(zhàn)
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開發(fā)Web Service客戶端
第7章ONVIF協(xié)議原理解析
7.1ONVIF簡介
7.1.1ONVIF背景簡介
7.1.2ONVIF的技術(shù)框架
7.1.3ONVIF規(guī)范
7.1.4ONVIF Profile
7.1.5ONVIF應(yīng)用
7.1.6ONVIF測試工具
7.1.7ONVIF開發(fā)IPC的流程
7.2ONVIF功能概述
7.2.1概念定義
7.2.2縮寫
7.2.3Web服務(wù)
7.2.4設(shè)備發(fā)現(xiàn)
7.2.5設(shè)備類型
7.2.6設(shè)備管理
7.2.7設(shè)備輸入/輸出
7.2.8圖像配置
7.2.9媒體配置
7.2.10實時流
7.2.11事件處理
7.2.12PTZ控制
7.2.13視頻分析
7.2.14分析設(shè)備
7.2.15顯示
7.2.16接收器
7.2.17存儲
第8章ONVIF框架代碼案例應(yīng)用
8.1Windows系統(tǒng)下生成ONVIF框架代碼
8.1.1下載WSDL文件
8.1.2新建工作空間
8.1.3修改typemap.dat
8.1.4生成onvif.h文件
8.1.5鑒權(quán)(認(rèn)證)
8.1.6正式生成框架代碼
8.1.7關(guān)聯(lián)自己的命名空間
8.1.8提取需要的文件
8.2ONVIF設(shè)備搜索
8.2.1WSDiscovery原理
8.2.2單播、多播(組播)和廣播
8.2.3設(shè)備搜索
8.3獲取設(shè)備基本信息
8.4鑒權(quán)(認(rèn)證)
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鑒權(quán)(認(rèn)證)
8.8.7根據(jù)頭文件產(chǎn)生框架代碼
8.8.8復(fù)制其他文件
8.8.9關(guān)聯(lián)自己的命名空間
8.8.10代碼封裝
8.8.11設(shè)備查找的案例代碼
第9章SIP及eXosip開源庫應(yīng)用
9.1SIP簡介
9.1.1SIP的功能
9.1.2SIP的實現(xiàn)機制
9.1.3SIP的特征及元素
9.1.4SIP會話構(gòu)成
9.1.5SIP通信流程及消息
9.1.6H.323協(xié)議和SIP的比較
9.1.7SIP與SDP
9.1.8SIP工作流程
9.1.9SIP超時機制
9.2eXosip開源庫簡介
9.2.1oSIP及eXosip簡介
9.2.2Windows系統(tǒng)下編譯oSIP2和eXosip2
9.2.3Ubuntu下編譯oSIP2和eXosip2
9.2.4案例:UAS和UAC入門
9.2.5oSIP的重要數(shù)據(jù)結(jié)構(gòu)
9.2.6oSIP的初始化工作
9.2.7oSIP收發(fā)消息機制
9.2.8oSIP管理事務(wù)及會話
9.2.9eXosip協(xié)議棧簡介
第10章GB/T 28181協(xié)議原理
10.1協(xié)議簡介
10.2術(shù)語、定義和縮略語
10.2.1術(shù)語和定義
10.2.2縮略語
10.3互聯(lián)結(jié)構(gòu)
10.3.1SIP監(jiān)控域互聯(lián)結(jié)構(gòu)
10.3.2SIP監(jiān)控域與非SIP監(jiān)控域互聯(lián)結(jié)構(gòu)
10.3.3聯(lián)網(wǎng)系統(tǒng)通信協(xié)議結(jié)構(gòu)
10.4傳輸要求
10.5交換要求
10.5.1統(tǒng)一編碼規(guī)則
10.5.2媒體壓縮編解碼
10.5.3媒體存儲封裝格式
10.5.4SDP定義
10.5.5網(wǎng)絡(luò)傳輸協(xié)議的轉(zhuǎn)換
10.5.6控制協(xié)議的轉(zhuǎn)換
10.5.7媒體傳輸協(xié)議的轉(zhuǎn)換
10.5.8媒體數(shù)據(jù)格式的轉(zhuǎn)換
10.5.9與其他系統(tǒng)的數(shù)據(jù)交換
10.5.10信令字符集
10.6控制要求
10.7傳輸、交換、控制安全性要求
10.8控制、傳輸流程和協(xié)議接口
10.8.1注冊和注銷
10.8.2實時視音頻點播
10.8.3設(shè)備控制
10.8.4報警事件通知和分發(fā)
10.8.5設(shè)備信息查詢
10.8.6狀態(tài)信息報送
10.8.7歷史視音頻文件檢索
10.8.8歷史視音頻回放
10.8.9歷史視音頻文件下載
10.8.10網(wǎng)絡(luò)校時
10.8.11訂閱和通知
10.8.12語音廣播和語音對講
第11章GB/T 28181國標(biāo)平臺案例應(yīng)用
11.1國標(biāo)平臺簡介
11.1.1國標(biāo)平臺的組成
11.1.2國標(biāo)平臺的組網(wǎng)及特點
11.2LiveGBS平臺簡介
11.2.1LiveGBS的服務(wù)架構(gòu)
11.2.2LiveCMS的配置文件
11.2.3LiveSMS的配置文件
11.2.4LiveSMS的運行
11.2.5配置設(shè)備接入
11.2.6平臺管理
11.3EasyGBS平臺簡介
11.3.1運行軟件
11.3.2設(shè)備接入
11.3.3平臺管理
11.3.4平臺應(yīng)用案例
11.4GB/T 28181抓包流程分析