關(guān)于我們
書(shū)單推薦
新書(shū)推薦
|
FFmpeg 音視頻開(kāi)發(fā)基礎(chǔ)與實(shí)戰(zhàn) 讀者對(duì)象:多媒體技術(shù)開(kāi)發(fā)工程師,音視頻算法研究人員,多媒體研究方向的在校生,以及希望對(duì)音視頻和 FFMpeg 有深入了解的其他讀者。
全書(shū)內(nèi)容分為三部分,共15 章。第1~6 章為第一部分,主要講解音視頻開(kāi)發(fā)的基礎(chǔ)知識(shí),簡(jiǎn)要介紹音視頻技術(shù)的發(fā)展背景,以及主流的音視頻壓縮編碼算法、音視頻容器格式和網(wǎng)絡(luò)流媒體協(xié)議等。第7~9章為第二部分,主要講解命令行工具ffmpeg、ffprobe 和ffplay 的使用方法,包括如何使用這些工具進(jìn)行視頻播放、格式檢測(cè)、編轉(zhuǎn)碼、格式轉(zhuǎn)換和流媒體推拉流等操作;第10~15 章為第三部分,主要講解基于FFmpeg SDK 的開(kāi)發(fā)實(shí)戰(zhàn),主要介紹如何在工程中調(diào)用libavcodec 和libavformat 等庫(kù)提供的接口實(shí)現(xiàn)音視頻處理的相關(guān)功能。本書(shū)適合從事音視頻編解碼、多媒體應(yīng)用開(kāi)發(fā)和流媒體技術(shù)的初、中級(jí)開(kāi)發(fā)者,以及各大院校學(xué)生閱讀,也適合有一定經(jīng)驗(yàn)的開(kāi)發(fā)人員參考使用。
殷汶杰,2013年畢業(yè)于上海大學(xué)信息與通信工程學(xué)院,主要研究方向?yàn)橐曨l壓縮編碼、流媒體技術(shù),其間發(fā)表了多篇高水平學(xué)術(shù)論文。具有多家一線互聯(lián)網(wǎng)上市公司、世界五百?gòu)?qiáng)企業(yè)與行業(yè)獨(dú)角獸公司的核心開(kāi)發(fā)工作經(jīng)驗(yàn),成功申請(qǐng)了多項(xiàng)專利(其中一項(xiàng)國(guó)際專利)。發(fā)表了數(shù)百篇技術(shù)博客,并發(fā)布了多個(gè)線上教學(xué)課程,在行業(yè)內(nèi)具有較強(qiáng)的技術(shù)影響力。
第一部分 基礎(chǔ)知識(shí)
第1 章 音視頻技術(shù)概述 ................................................................................................. 2 1.1 音視頻信息與多媒體系統(tǒng) .................................................................................... 2 1.1.1 信息傳輸系統(tǒng)的發(fā)展 ................................................................................. 2 1.1.2 信息時(shí)代的音視頻技術(shù) ............................................................................. 4 1.1.3 音視頻技術(shù)的未來(lái)展望 ............................................................................. 5 1.2 典型的音視頻與多媒體系統(tǒng)結(jié)構(gòu) ........................................................................ 6 1.2.1 視頻點(diǎn)播 ..................................................................................................... 7 1.2.2 視頻直播 ..................................................................................................... 8 1.2.3 安防監(jiān)控 ..................................................................................................... 9 1.2.4 視頻會(huì)議 ..................................................................................................... 9 第2 章 圖像、像素與顏色空間 ..................................................................................... 11 2.1 圖像與像素 .......................................................................................................... 11 2.2 圖像的位深與顏色空間 ...................................................................................... 12 2.2.1 圖像的位深 ............................................................................................... 12 2.2.2 圖像的顏色空間 ....................................................................................... 14 2.3 圖像壓縮編碼 ...................................................................................................... 15 2.3.1 圖像壓縮算法分類 ................................................................................... 16 2.3.2 圖像壓縮基本算法 ................................................................................... 16 2.3.3 常見(jiàn)的圖像壓縮編碼格式 ....................................................................... 20 第3 章 視頻壓縮編碼 .................................................................................................. 22 3.1 視頻壓縮編碼的基礎(chǔ)知識(shí) .................................................................................. 22 3.1.1 視頻信息的數(shù)字化表示 ........................................................................... 22 3.1.2 常用的視頻格式與分辨率 ....................................................................... 24 3.1.3 對(duì)視頻數(shù)據(jù)壓縮編碼的原因.................................................................... 24 3.2 視頻壓縮編碼標(biāo)準(zhǔn)的發(fā)展歷程 .......................................................................... 24 3.3 視頻壓縮編碼的基本原理 .................................................................................. 25 3.3.1 視頻數(shù)據(jù)中的冗余信息 ........................................................................... 25 3.3.2 預(yù)測(cè)編碼 ................................................................................................... 26 3.3.3 變換編碼 ................................................................................................... 27 3.3.4 熵編碼 ....................................................................................................... 28 3.4 視頻編碼標(biāo)準(zhǔn)H.264 ........................................................................................... 28 3.4.1 H.264 簡(jiǎn)介 ................................................................................................ 28 3.4.2 H.264 的框架 ............................................................................................ 28 3.4.3 H.264 的基本算法 ..................................................................................... 30 3.5 高效視頻編碼標(biāo)準(zhǔn)H.265.................................................................................... 33 3.5.1 H.265 簡(jiǎn)介 ................................................................................................ 33 3.5.2 H.265 的框架 ............................................................................................ 33 3.5.3 H.265 的基本算法 ..................................................................................... 35 第4 章 音頻壓縮編碼 .................................................................................................. 42 4.1 音頻壓縮編碼的基礎(chǔ)知識(shí) .................................................................................. 42 4.1.1 聲音信息的概念 ....................................................................................... 42 4.1.2 聲音信息的基本要素 ............................................................................... 42 4.2 音頻信息采樣與數(shù)字化 ...................................................................................... 43 4.2.1 模擬音頻 ................................................................................................... 43 4.2.2 數(shù)字音頻 ................................................................................................... 44 4.2.3 采樣和量化 ............................................................................................... 44 4.3 脈沖編碼調(diào)制 ...................................................................................................... 46 4.3.1 PCM 量化區(qū)間分割 .................................................................................. 46 4.3.2 PCM 量化編碼規(guī)則 .................................................................................. 49 4.4 MP3 格式與MP3 編碼標(biāo)準(zhǔn) ................................................................................ 51 4.4.1 MP3 格式 ................................................................................................... 52 4.4.2 MP3 編碼標(biāo)準(zhǔn) ........................................................................................... 62 4.5 AAC 格式與AAC 編碼標(biāo)準(zhǔn) ............................................................................... 67 4.5.1 AAC 格式 .................................................................................................. 67 4.5.2 AAC 編碼標(biāo)準(zhǔn) .......................................................................................... 72 第5 章 音視頻文件容器和封裝格式 ............................................................................. 74 5.1 概述 ...................................................................................................................... 74 5.2 FLV 格式 .............................................................................................................. 75 5.2.1 FLV 文件結(jié)構(gòu) ........................................................................................... 75 5.2.2 FLV 文件頭 ............................................................................................... 76 5.2.3 FLV 標(biāo)簽 ................................................................................................... 77 5.3 MPEG-TS 格式 .................................................................................................... 84 5.3.1 信息包頭 ................................................................................................... 84 5.3.2 PES 包結(jié)構(gòu) ............................................................................................... 85 5.3.3 PSI 結(jié)構(gòu) ..................................................................................................... 87 5.4 MP4 格式 ............................................................................................................. 88 5.4.1 MP4 格式簡(jiǎn)介 ........................................................................................... 88 5.4.2 ISO 協(xié)議族 ................................................................................................ 89 5.4.3 MP4 封裝格式 ........................................................................................... 89 5.4.4 Box 類型 .................................................................................................... 90 5.4.5 MP4 文件結(jié)構(gòu) ........................................................................................... 92 5.4.6 構(gòu)建視頻流的播放時(shí)間軸 ....................................................................... 98 第6 章 音視頻流媒體協(xié)議 ......................................................................................... 104 6.1 網(wǎng)絡(luò)協(xié)議模型 .................................................................................................... 105 6.1.1 ISO/OSI 模型結(jié)構(gòu) .................................................................................. 105 6.1.2 TCP/IP 模型結(jié)構(gòu) .................................................................................... 106 6.2 網(wǎng)絡(luò)流媒體協(xié)議——RTMP .............................................................................. 120 6.2.1 RTMP 的概念 .......................................................................................... 120 6.2.2 RTMP 分塊與塊流 .................................................................................. 121 6.2.3 RTMP 信息格式 ...................................................................................... 126 6.2.4 RTMP 信息與命令 .................................................................................. 129 6.3 網(wǎng)絡(luò)流媒體協(xié)議——HLS 協(xié)議 ........................................................................ 136 6.3.1 HLS 協(xié)議的概念 ..................................................................................... 136 6.3.2 HLS 直播流媒體系統(tǒng)結(jié)構(gòu) ..................................................................... 136 6.3.3 HLS 索引文件格式 ................................................................................. 138 第二部分 命令行工具 第7 章 FFmpeg 的基本操作 ...................................................................................... 144 7.1 FFmpeg 概述 ...................................................................................................... 144 7.1.1 各個(gè)編譯類型的區(qū)別 ............................................................................. 145 7.1.2 編譯FFmpeg 源代碼 .............................................................................. 148 7.2 ffplay 的基本使用方法 ...................................................................................... 155 7.2.1 顯示ffplay 版本 ...................................................................................... 155 7.2.2 顯示編譯選項(xiàng) ......................................................................................... 156 7.2.3 設(shè)置日志級(jí)別 ......................................................................................... 156 7.2.4 全屏播放 ................................................................................................. 158 7.2.5 指定輸入視頻的寬、高和幀率 .............................................................. 158 7.2.6 禁用音頻流、視頻流和字幕流 .............................................................. 158 7.2.7 指定播放的起始時(shí)間和時(shí)長(zhǎng).................................................................. 159 7.2.8 指定播放音量 ......................................................................................... 159 7.2.9 設(shè)置播放窗口 ......................................................................................... 159 7.3 ffprobe 的基本使用方法 .................................................................................... 159 7.3.1 顯示詳細(xì)的封裝格式信息 ..................................................................... 160 7.3.2 顯示每一路媒體流信息 ......................................................................... 161 7.3.3 顯示每一個(gè)碼流包的信息 ..................................................................... 164 7.3.4 顯示媒體流和碼流包的負(fù)載信息 .......................................................... 165 7.3.5 顯示每一幀圖像的信息 ......................................................................... 167 7.3.6 指定檢測(cè)信息的輸出格式 ..................................................................... 169 7.4 ffmpeg 的基本使用方法 .................................................................................... 175 7.4.1 顯示版本和編譯配置信息 ..................................................................... 176 7.4.2 顯示支持的解復(fù)用器格式 ..................................................................... 177 7.4.3 顯示支持的復(fù)用器格式 ......................................................................... 179 7.4.4 顯示支持的所有輸入格式和輸出格式 .................................................. 181 7.4.5 顯示支持的解碼器 ................................................................................. 183 7.4.6 顯示支持的編碼器 ................................................................................. 184 7.4.7 顯示支持的媒體協(xié)議 ............................................................................. 186 7.4.8 顯示支持的硬件加速框架 ..................................................................... 188 7.4.9 ffmpeg 封裝格式轉(zhuǎn)換 ............................................................................. 188 7.4.10 視頻的解碼和編碼 ............................................................................... 193 7.4.11 從視頻中截取圖像 ................................................................................ 206 7.4.12 ffmpeg 視頻轉(zhuǎn)碼 ................................................................................... 207 第8 章 濾鏡圖 ........................................................................................................... 209 8.1 ffmpeg 音視頻濾鏡 ............................................................................................ 209 8.1.1 簡(jiǎn)單濾鏡圖 ............................................................................................. 209 8.1.2 復(fù)合濾鏡圖 ............................................................................................. 210 8.1.3 ffmpeg 支持的濾鏡列表 ......................................................................... 211 8.2 簡(jiǎn)單濾鏡圖的應(yīng)用 ............................................................................................ 212 8.2.1 常用的視頻編輯簡(jiǎn)單濾鏡圖.................................................................. 212 8.2.2 常用的音頻編輯簡(jiǎn)單濾鏡圖.................................................................. 227 8.3 復(fù)合濾鏡圖的應(yīng)用 ............................................................................................ 230 8.3.1 常用的視頻編輯復(fù)合濾鏡圖.................................................................. 230 8.3.2 常用的音頻編輯復(fù)合濾鏡圖.................................................................. 234 第9 章 流媒體應(yīng)用 .................................................................................................... 236 9.1 構(gòu)建SRS 流媒體服務(wù) ....................................................................................... 236 9.1.1 部署RTMP 流媒體服務(wù) ......................................................................... 238 9.1.2 部署HLS 流媒體服務(wù) ............................................................................ 240 9.1.3 部署HTTP-FLV 流媒體服務(wù) ................................................................. 241 9.2 構(gòu)建Nginx RTMP 流媒體服務(wù) ......................................................................... 241 9.2.1 Nginx 的編譯和部署 .............................................................................. 242 9.2.2 Nginx 的流媒體模塊nginx-rtmp-module .............................................. 246 第三部分 開(kāi)發(fā)實(shí)戰(zhàn) 第10 章 FFmpeg SDK 的使用................................................................................... 254 10.1 使用CMake 構(gòu)建工程 ..................................................................................... 255 10.1.1 使用CMake 構(gòu)建Hello World 工程 .................................................... 255 10.1.2 在工程中編譯并輸出多個(gè)文件 ............................................................ 257 10.1.3 在工程中添加頭文件和源文件目錄 .................................................... 259 10.1.4 在工程中引入動(dòng)態(tài)庫(kù) ........................................................................... 262 10.2 FFmpeg SDK 基本使用方法示例:獲取目錄下的文件信息 ....................... 264 10.2.1 顯示指定目錄信息 ............................................................................... 264 10.2.2 解析API 和結(jié)構(gòu)體 ............................................................................... 266 第11 章 使用FFmpeg SDK 進(jìn)行視頻編解碼 ............................................................ 269 11.1 libavcodec 視頻編碼 ........................................................................................ 269 11.1.1 主函數(shù)與數(shù)據(jù)I/O 實(shí)現(xiàn) ........................................................................ 269 11.1.2 視頻編碼器初始化 ................................................................................ 272 11.1.3 編碼循環(huán)體............................................................................................ 284 11.1.4 關(guān)閉編碼器............................................................................................ 289 11.1.5 FFmpeg 視頻編碼延遲分析 ................................................................. 290 11.2 libavcodec 視頻解碼 ........................................................................................ 294 11.2.1 主函數(shù)實(shí)現(xiàn)............................................................................................ 294 11.2.2 視頻解碼器初始化 ................................................................................ 295 11.2.3 解碼循環(huán)體............................................................................................ 297 11.2.4 關(guān)閉解碼器............................................................................................ 304 第12 章 使用FFmpeg SDK 進(jìn)行音頻編解碼 ............................................................ 306 12.1 libavcodec 音頻編碼 ........................................................................................ 306 目錄 ∣ XIII 12.1.1 主函數(shù)實(shí)現(xiàn) ........................................................................................... 306 12.1.2 音頻編碼器初始化 ............................................................................... 307 12.1.3 編碼循環(huán)體 ........................................................................................... 310 12.1.4 關(guān)閉編碼器 ........................................................................................... 313 12.2 libavcodec 音頻解碼 ........................................................................................ 315 12.2.1 主函數(shù)實(shí)現(xiàn) ........................................................................................... 315 12.2.2 音頻解碼器初始化 ............................................................................... 316 12.2.3 解碼循環(huán)體 ........................................................................................... 318 12.2.4 關(guān)閉解碼器 ........................................................................................... 324 第13 章 使用FFmpeg SDK 進(jìn)行音視頻文件的解封裝與封裝 ................................... 326 13.1 音視頻文件的解封裝 ...................................................................................... 326 13.1.1 主函數(shù)實(shí)現(xiàn) ........................................................................................... 326 13.1.2 解復(fù)用器初始化 ................................................................................... 327 13.1.3 循環(huán)讀取碼流包數(shù)據(jù) ........................................................................... 335 13.1.4 釋放解復(fù)用器和解碼器 ....................................................................... 338 13.1.5 主函數(shù)的整體實(shí)現(xiàn) ............................................................................... 339 13.2 音頻流與視頻流文件的封裝 .......................................................................... 340 13.2.1 主函數(shù)實(shí)現(xiàn) ........................................................................................... 340 13.2.2 音視頻流復(fù)用器的初始化.................................................................... 341 13.2.3 復(fù)用音頻流和視頻流 ........................................................................... 348 13.2.4 釋放復(fù)用器實(shí)例 ................................................................................... 353 第14 章 使用FFmpeg SDK 添加視頻濾鏡和音頻濾鏡 .............................................. 355 14.1 視頻濾鏡 .......................................................................................................... 355 14.1.1 主函數(shù)實(shí)現(xiàn) ........................................................................................... 355 14.1.2 視頻濾鏡初始化 ................................................................................... 356 14.1.3 循環(huán)編輯視頻幀 ................................................................................... 365 14.1.4 銷毀視頻濾鏡 ....................................................................................... 368 14.2 音頻濾鏡 .......................................................................................................... 370 14.2.1 主函數(shù)框架 ........................................................................................... 370 14.2.2 音頻濾鏡初始化 ................................................................................... 371 14.2.3 循環(huán)編輯音頻幀 ................................................................................... 380 14.2.4 銷毀音頻濾鏡 ....................................................................................... 381 第15 章 使用FFmpeg SDK 進(jìn)行視頻圖像轉(zhuǎn)換與音頻重采樣 ................................... 383 15.1 視頻圖像轉(zhuǎn)換 .................................................................................................. 383 15.1.1 主函數(shù)實(shí)現(xiàn) ........................................................................................... 383 15.1.2 視頻格式轉(zhuǎn)換初始化 ........................................................................... 384 15.1.3 視頻的圖像幀循環(huán)轉(zhuǎn)換 ....................................................................... 388 15.1.4 視頻格式轉(zhuǎn)換結(jié)構(gòu)的銷毀和釋放 ........................................................ 390 15.2 音頻重采樣 ...................................................................................................... 391 15.2.1 主函數(shù)實(shí)現(xiàn) ........................................................................................... 392 15.2.2 音頻重采樣初始化 ............................................................................... 392 15.2.3 對(duì)音頻幀循環(huán)重采樣 ........................................................................... 397 15.2.4 音頻重采樣結(jié)構(gòu)的銷毀和釋放 ............................................................ 400
你還可能感興趣
我要評(píng)論
|