近年來(lái),隨著5G網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,F(xiàn)Fmpeg音視頻及流媒體直播應(yīng)用越來(lái)越普及,音視頻流媒體方面的開(kāi)發(fā)崗位也非常多。然而,市面上卻沒(méi)有一本通俗易懂又系統(tǒng)完整的FFmpeg 二次開(kāi)發(fā)視頻監(jiān)控系統(tǒng)的入門(mén)書(shū),網(wǎng)絡(luò)上的知識(shí)雖然不少,但是太散亂,不合適讀者入門(mén)。
眾所周知,F(xiàn)Fmpeg命令行應(yīng)用起來(lái)簡(jiǎn)單,但SDK二次開(kāi)發(fā)相對(duì)難以理解。很多程序員想從事音視頻或流媒體開(kāi)發(fā),但始終糊里糊涂、不得入門(mén)。筆者剛畢業(yè)時(shí),也是純讀者一個(gè),付出了艱苦的努力,終于有一些收獲。借此機(jī)會(huì),筆者將相關(guān)內(nèi)容整理成專(zhuān)業(yè)書(shū)籍,希望給讀者帶來(lái)幫助,少走彎路。
FFmpeg發(fā)展迅猛,功能強(qiáng)大,命令行也很簡(jiǎn)單、很實(shí)用,但是有一個(gè)現(xiàn)象:即便使用命令行實(shí)現(xiàn)了一些特效,但依然不理解原理,不知道具體的參數(shù)是什么含義。音視頻與流媒體是一門(mén)很復(fù)雜的技術(shù),涉及的概念、原理、理論非常多,很多初學(xué)者不學(xué)基礎(chǔ)理論,而是直接做項(xiàng)目、看源碼,但往往在看到C/C 的代碼時(shí)一頭霧水,不知道代碼到底是什么意思。這是因?yàn)闆](méi)有學(xué)習(xí)音視頻和流媒體的基礎(chǔ)理論,就像學(xué)習(xí)英語(yǔ),不學(xué)習(xí)基本單詞,而是天天聽(tīng)英語(yǔ)新聞,總也聽(tīng)不懂,所以一定要認(rèn)真學(xué)習(xí)基礎(chǔ)理論,然后學(xué)習(xí)播放器、轉(zhuǎn)碼器、流媒體直播、視頻監(jiān)控等。
本系列的前5本書(shū)為《FFmpeg入門(mén)詳細(xì)講解音視頻原理及應(yīng)用》《FFmpeg入門(mén)詳細(xì)講解流媒體直播原理及應(yīng)用》《FFmpeg入門(mén)詳細(xì)講解命令行及音視頻特效原理及應(yīng)用》《FFmpeg入門(mén)詳細(xì)講解SDK二次開(kāi)發(fā)及直播美顏原理及應(yīng)用》《FFmpeg入門(mén)詳解音視頻流媒體播放器原理及應(yīng)用》。這6本書(shū)由淺入深,圍繞FFmpeg原理及應(yīng)用,層層展開(kāi),系統(tǒng)講解了音視頻、流媒體和直播的基礎(chǔ)原理; 詳細(xì)講解了FFmpeg的命令行和SDK應(yīng)用,手把手地帶領(lǐng)讀者進(jìn)行常用命令行的應(yīng)用和原理解析,并深入介紹核心API的參數(shù)及應(yīng)用場(chǎng)景; 重點(diǎn)介紹音視頻同步等關(guān)鍵技術(shù),引領(lǐng)讀者開(kāi)發(fā)一款通用的音視頻和流媒體播放器。最后,本書(shū)以視頻監(jiān)控為切入點(diǎn),綜合相關(guān)的知識(shí)點(diǎn)在監(jiān)控的同時(shí)進(jìn)行H.264/H.265編碼,并存儲(chǔ)到本地,形成一個(gè)完整的基于音視頻流媒體的視頻監(jiān)控項(xiàng)目。
閱讀建議
本書(shū)是一本適合讀者入門(mén)的FFmpeg二次開(kāi)發(fā)視頻監(jiān)控的書(shū)籍,既有通俗易懂的基本概念,又有豐富的案例和原理分析,圖文并茂,知識(shí)體系非常完善。本書(shū)首先對(duì)音視頻、流媒體和直播的基本概念和原理進(jìn)行復(fù)習(xí),對(duì)重要的概念進(jìn)行具體闡述,然后結(jié)合FFmpeg的SDK進(jìn)行案例實(shí)戰(zhàn),讀者既能學(xué)到實(shí)踐操作知識(shí),也能理解底層理論,非常適合初學(xué)者。建議讀者先學(xué)習(xí)FFmpeg音視頻流媒體系列的前5本,然后學(xué)習(xí)本書(shū)。
本書(shū)第1~5章介紹FFmpeg基礎(chǔ)架構(gòu)及二次開(kāi)發(fā)視頻監(jiān)控客戶端,第6~11章介紹ONVIF、SIP、SOAP和GB/T 28181等協(xié)議及具體的案例應(yīng)用。
建議讀者在學(xué)習(xí)過(guò)程中,循序漸進(jìn),不要跳躍。本書(shū)的知識(shí)體系是筆者精心準(zhǔn)備的,由淺入深,層層深入,對(duì)于抽象復(fù)雜的概念和原理,筆者盡量通過(guò)圖文并茂的方式進(jìn)行講解,非常適合初學(xué)者。本書(shū)從最基礎(chǔ)的FFmpeg 二次開(kāi)發(fā)讀取攝像頭案例開(kāi)始,理論與實(shí)踐并重,讀者一定要?jiǎng)邮謱?shí)踐,親自試驗(yàn)各個(gè)案例,并理解原理和流程。然后講解詳細(xì)的ONVIF、SIP、SOAP和GB/T 28181等協(xié)議,并應(yīng)用到具體的案例中,爭(zhēng)取每個(gè)案例都能將知識(shí)點(diǎn)活學(xué)活用。建議讀者一定要將本系列的前幾本所學(xué)的音視頻基礎(chǔ)知識(shí)和流媒體直播基礎(chǔ)知識(shí)應(yīng)用到本書(shū)中,理論指導(dǎo)實(shí)踐,加深對(duì)每個(gè)知識(shí)點(diǎn)的理解。讀者不但要會(huì)用FFmpeg的SDK來(lái)完成視頻監(jiān)控功能,還要能理解底層原理及相關(guān)的理論基礎(chǔ)。最后進(jìn)行分析總結(jié),爭(zhēng)取對(duì)所學(xué)的理論進(jìn)行升華,做到融會(huì)貫通。
掃描目錄上方的二維碼可下載本書(shū)配套資源。
致謝
首先感謝清華大學(xué)出版社趙佳霓編輯給筆者提出了許多寶貴的建議,以及推動(dòng)了本書(shū)出版。感謝我的家人和親朋好友,祝大家每天快樂(lè)健康。
感謝我的學(xué)員,群里的學(xué)員越來(lái)越多,并經(jīng)常提出很多寶貴意見(jiàn)。隨著培訓(xùn)時(shí)間和經(jīng)驗(yàn)的增長(zhǎng),對(duì)知識(shí)點(diǎn)的理解也越來(lái)越透徹,希望給大家多帶來(lái)一些光明,盡量讓大家少走彎路。已經(jīng)有群里的老學(xué)員通過(guò)學(xué)到的FFmpeg音視頻流媒體知識(shí)獲得了50萬(wàn)元的年薪,這一點(diǎn)讓我感到非常欣慰;畹嚼、學(xué)到老,學(xué)習(xí)是一個(gè)過(guò)程,沒(méi)有終點(diǎn),唯有堅(jiān)持,大家一起加油,為美好的明天而奮斗。
由于時(shí)間倉(cāng)促,書(shū)中難免存在不妥之處,請(qǐng)讀者見(jiàn)諒并提出寶貴意見(jiàn)。
梅會(huì)東
2024年4月于北京清華園
第1章流媒體與RTSP/RTP/RTCP簡(jiǎn)介
1.1流媒體簡(jiǎn)介
1.2RTSP簡(jiǎn)介
1.2.1RTSP支持
1.2.2RTSP特點(diǎn)
1.3RTSP交互流程
1.4RTSP重要概念
1.4.1集合控制
1.4.2實(shí)體
1.4.3容器文件
1.4.4RTSP會(huì)話
1.4.5RTSP參數(shù)
1.4.6RTSP信息
1.4.7RTSP連接
1.4.8RTSP擴(kuò)展
1.4.9RTSP操作模式
1.5RTSP重要方法
1.6RTP簡(jiǎn)介
1.6.1RTP格式
1.6.2RTP的會(huì)話過(guò)程
1.7RTCP簡(jiǎn)介
1.7.1RTCP的5種分組類(lèi)型
1.7.2RTCP包結(jié)構(gòu)
第2章VLC及FFplay流媒體播放器
2.1VLC播放器簡(jiǎn)介
2.1.1VLC播放器
2.1.2VLC的功能列表
2.1.3VLC播放網(wǎng)絡(luò)串流
2.1.4VLC作為流媒體服務(wù)器
2.1.5使用Wireshark抓包分析RTSP交互流程
2.2FFplay播放原理簡(jiǎn)介
2.2.1視頻播放器簡(jiǎn)介
2.2.2FFmpeg播放架構(gòu)與原理
第3章FFmpeg二次開(kāi)發(fā)采集并預(yù)覽本地?cái)z像頭
3.1FFmpeg的命令行方式處理攝像頭
3.2FFmpeg的SDK方式讀取本地?cái)z像頭
3.3FFmpeg SDL2讀取并顯示本地?cái)z像頭
3.3.1SDL2簡(jiǎn)介
3.3.2VS 2015搭建SDL2開(kāi)發(fā)環(huán)境
3.3.3Qt 5.9平臺(tái)搭建SDL2開(kāi)發(fā)環(huán)境
3.3.4Linux平臺(tái)搭建SDL2開(kāi)發(fā)環(huán)境
3.3.5SDL2播放YUV視頻文件
3.3.6使用FFmpeg SDL2讀取本地?cái)z像頭并渲染
3.4FFmpeg Qt讀取并顯示本地?cái)z像頭
3.4.1信號(hào)
3.4.2槽
3.4.3信號(hào)與槽的關(guān)聯(lián)
3.4.4信號(hào)與槽的注意事項(xiàng)
3.4.5元對(duì)象工具
3.4.6案例:標(biāo)準(zhǔn)信號(hào)槽
3.4.7案例:自定義信號(hào)槽
3.4.8Qt顯示圖像
3.4.9Qt縮放圖像
3.4.10Qt旋轉(zhuǎn)圖像
第4章H.264/H.265視頻編碼并存儲(chǔ)
4.1FFmpeg命令行編碼H.264
4.1.1YUV編碼為H.264
4.1.2控制視頻的碼率及分辨率
4.1.3控制視頻的GOP
4.2libx264的常用編碼選項(xiàng)簡(jiǎn)介
4.2.1FFmpeg中l(wèi)ibx264的選項(xiàng)
4.2.2x264.exe中的選項(xiàng)名與選項(xiàng)值
4.3libx265的常用編碼選項(xiàng)簡(jiǎn)介
4.4編解碼原理流程及API解析
4.4.1視頻解碼過(guò)程簡(jiǎn)介
4.4.2視頻解碼流程及主要API
4.4.3視頻編碼過(guò)程簡(jiǎn)介
4.4.4視頻編碼流程及主要API
4.5FFmpeg編程流程與案例實(shí)戰(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編解碼與時(shí)間基詳解
4.6.1GOP與PTS/DTS
4.6.2FFmpeg中的時(shí)間基與時(shí)間戳
4.6.3轉(zhuǎn)封裝過(guò)程中的時(shí)間基轉(zhuǎn)換
4.6.4轉(zhuǎn)碼過(guò)程中的時(shí)間基轉(zhuǎn)換
第5章FFmpeg二次開(kāi)發(fā)IPC視頻監(jiān)控
5.1視頻監(jiān)控系統(tǒng)簡(jiǎn)介
5.1.1視頻監(jiān)控系統(tǒng)的功能及特點(diǎn)
5.1.2視頻監(jiān)控系統(tǒng)的工作原理及結(jié)構(gòu)
5.1.3視頻監(jiān)控系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)
5.1.4視頻監(jiān)控系統(tǒng)的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)
5.2FFmpeg讀取網(wǎng)絡(luò)攝像頭
5.3FFmpeg實(shí)現(xiàn)H.264/H.265編碼的C 類(lèi)封裝
第6章SOAP及gSOAP實(shí)戰(zhàn)
6.1SOAP簡(jiǎn)介
6.1.1RPC簡(jiǎn)介
6.1.2HTTP簡(jiǎn)介
6.1.3XML簡(jiǎn)介
6.1.4WSDL簡(jiǎn)介
6.1.5SOAP簡(jiǎn)介
6.1.6Web Service簡(jiǎn)介
6.2gSOAP簡(jiǎn)介
6.2.1soapcpp2的用法
6.2.2wsdl2h的用法
6.2.3CentOS編譯并測(cè)試gSOAP
6.2.4Ubuntu編譯gSOAP
6.2.5VS利用gSOAP開(kāi)發(fā)Web Service客戶端
第7章ONVIF協(xié)議原理解析
7.1ONVIF簡(jiǎn)介
7.1.1ONVIF背景簡(jiǎn)介
7.1.2ONVIF的技術(shù)框架
7.1.3ONVIF規(guī)范
7.1.4ONVIF Profile
7.1.5ONVIF應(yīng)用
7.1.6ONVIF測(cè)試工具
7.1.7ONVIF開(kāi)發(fā)IPC的流程
7.2ONVIF功能概述
7.2.1概念定義
7.2.2縮寫(xiě)
7.2.3Web服務(wù)
7.2.4設(shè)備發(fā)現(xiàn)
7.2.5設(shè)備類(lèi)型
7.2.6設(shè)備管理
7.2.7設(shè)備輸入/輸出
7.2.8圖像配置
7.2.9媒體配置
7.2.10實(shí)時(shí)流
7.2.11事件處理
7.2.12PTZ控制
7.2.13視頻分析
7.2.14分析設(shè)備
7.2.15顯示
7.2.16接收器
7.2.17存儲(chǔ)
第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安裝依賴項(xiàng)
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開(kāi)源庫(kù)應(yīng)用
9.1SIP簡(jiǎn)介
9.1.1SIP的功能
9.1.2SIP的實(shí)現(xiàn)機(jī)制
9.1.3SIP的特征及元素
9.1.4SIP會(huì)話構(gòu)成
9.1.5SIP通信流程及消息
9.1.6H.323協(xié)議和SIP的比較
9.1.7SIP與SDP
9.1.8SIP工作流程
9.1.9SIP超時(shí)機(jī)制
9.2eXosip開(kāi)源庫(kù)簡(jiǎn)介
9.2.1oSIP及eXosip簡(jiǎn)介
9.2.2Windows系統(tǒng)下編譯oSIP2和eXosip2
9.2.3Ubuntu下編譯oSIP2和eXosip2
9.2.4案例:UAS和UAC入門(mén)
9.2.5oSIP的重要數(shù)據(jù)結(jié)構(gòu)
9.2.6oSIP的初始化工作
9.2.7oSIP收發(fā)消息機(jī)制
9.2.8oSIP管理事務(wù)及會(huì)話
9.2.9eXosip協(xié)議棧簡(jiǎn)介
第10章GB/T 28181協(xié)議原理
10.1協(xié)議簡(jiǎn)介
10.2術(shù)語(yǔ)、定義和縮略語(yǔ)
10.2.1術(shù)語(yǔ)和定義
10.2.2縮略語(yǔ)
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媒體存儲(chǔ)封裝格式
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注冊(cè)和注銷(xiāo)
10.8.2實(shí)時(shí)視音頻點(diǎn)播
10.8.3設(shè)備控制
10.8.4報(bào)警事件通知和分發(fā)
10.8.5設(shè)備信息查詢
10.8.6狀態(tài)信息報(bào)送
10.8.7歷史視音頻文件檢索
10.8.8歷史視音頻回放
10.8.9歷史視音頻文件下載
10.8.10網(wǎng)絡(luò)校時(shí)
10.8.11訂閱和通知
10.8.12語(yǔ)音廣播和語(yǔ)音對(duì)講
第11章GB/T 28181國(guó)標(biāo)平臺(tái)案例應(yīng)用
11.1國(guó)標(biāo)平臺(tái)簡(jiǎn)介
11.1.1國(guó)標(biāo)平臺(tái)的組成
11.1.2國(guó)標(biāo)平臺(tái)的組網(wǎng)及特點(diǎn)
11.2LiveGBS平臺(tái)簡(jiǎn)介
11.2.1LiveGBS的服務(wù)架構(gòu)
11.2.2LiveCMS的配置文件
11.2.3LiveSMS的配置文件
11.2.4LiveSMS的運(yùn)行
11.2.5配置設(shè)備接入
11.2.6平臺(tái)管理
11.3EasyGBS平臺(tái)簡(jiǎn)介
11.3.1運(yùn)行軟件
11.3.2設(shè)備接入
11.3.3平臺(tái)管理
11.3.4平臺(tái)應(yīng)用案例
11.4GB/T 28181抓包流程分析