●第一部分基礎知識
第1章音視頻技術概述2
1.1音視頻信息與多媒體繫統2
1.1.1信息傳輸繫統的發展2
1.1.2信息時代的音視頻技術4
1.1.3音視頻技術的未來展望5
1.2典型的音視頻與多媒體繫統結構6
1.2.1視頻點播7
1.2.2視頻直播8
1.2.3安防監控9
1.2.4視頻會議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常見的圖像壓縮編碼格式20
第3章視頻壓縮編碼22
3.1視頻壓縮編碼的基礎知識22
3.1.1視頻信息的數字化表示22
3.1.2常用的視頻格式與分辨率24
3.1.3對視頻數據壓縮編碼的原因24
3.2視頻壓縮編碼標準的發展歷程24
3.3視頻壓縮編碼的基本原理25
3.3.1視頻數據中的冗餘信息25
3.3.2預測編碼26
3.3.3變換編碼27
3.3.4熵編碼28
3.4視頻編碼標準H.26428
3.4.1H.264簡介28
3.4.2H.264的框架28
3.4.3H.264的基本算法30
3.5高效視頻編碼標準H.26533
3.5.1H.265簡介33
3.5.2H.265的框架33
3.5.3H.265的基本算法35
第4章音頻壓縮編碼42
4.1音頻壓縮編碼的基礎知識42
4.1.1聲音信息的概念42
4.1.2聲音信息的基本要素42
4.2音頻信息采樣與數字化43
4.2.1模擬音頻43
4.2.2數字音頻44
4.2.3采樣和量化.4
4.3脈衝編碼調制46
4.3.1PCM量化區間分割46
4.3.2PCM量化編碼規則49
4.4MP3格式與MP3編碼標準51
4.4.1MP3格式.52
4.4.2MP3編碼標準.62
4.5AAC格式與AAC編碼標準.67
4.5.1AAC格式67
4.5.2AAC編碼標準72
第5章音視頻文件容器和封裝格式.74
5.1概述74
5.2FLV格式75
5.2.1FLV文件結構.75
5.2.2FLV文件頭.76
5.2.3FLV標簽.77
5.3MPEG-TS格式84
5.3.1信息包頭.84
5.3.2PES包結構.85
5.3.3PSI結構.87
5.4MP4格式.88
5.4.1MP4格式簡介.88
5.4.2ISO協議族89
5.4.3MP4封裝格式.89
5.4.4Box類型90
5.4.5MP4文件結構.92
5.4.6構建視頻流的播放時間軸.98
第6章音視頻流媒體協議.104
6.1網絡協議模型105
6.1.1ISO/OSI模型結構105
6.1.2TCP/IP模型結構106
6.2網絡流媒體協議――RTMP120
6.2.1RTMP的概念120
6.2.2RTMP分塊與塊流121
6.2.3RTMP信息格式126
6.2.4RTMP信息與命令129
6.3網絡流媒體協議――HLS協議136
6.3.1HLS協議的概念.136
6.3.2HLS直播流媒體繫統結構.136
6.3.3HLS索引文件格式.138
第二部分命令行工具
第7章FFmpeg的基本操作144
7.1FFmpeg概述144
7.1.1各個編譯類型的區別.145
7.1.2編譯FFmpeg源代碼148
7.2ffplay的基本使用方法155
7.2.1顯示ffplay版本155
7.2.2顯示編譯選項.156
7.2.3設置日志級別.156
7.2.4全屏播放.158
7.2.5指定輸入視頻的寬、高和幀率158
7.2.6禁用音頻流、視頻流和字幕流158
7.2.7指定播放的起始時間和時長159
7.2.8指定播放音量.159
7.2.9設置播放窗口.159
7.3ffprobe的基本使用方法159
7.3.1顯示詳細的封裝格式信息.160
7.3.2顯示每一路媒體流信息.161
7.3.3顯示每一個碼流包的信息.164
7.3.4顯示媒體流和碼流包的負載信息165
7.3.5顯示每一幀圖像的信息.167
7.3.6指定檢測信息的輸出格式.169
7.4ffmpeg的基本使用方法175
7.4.1顯示版本和編譯配置信息.176
7.4.2顯示支持的解復用器格式.177
7.4.3顯示支持的復用器格式.179
7.4.4顯示支持的所有輸入格式和輸出格式181
7.4.5顯示支持的解碼器.183
7.4.6顯示支持的編碼器.184
7.4.7顯示支持的媒體協議.186
7.4.8顯示支持的硬件加速框架.188
7.4.9ffmpeg封裝格式轉換.188
7.4.10視頻的解碼和編碼.193
7.4.11從視頻中截取圖像206
7.4.12ffmpeg視頻轉碼.207
第8章濾鏡圖.209
8.1ffmpeg音視頻濾鏡209
8.1.1簡單濾鏡圖.209
8.1.2復合濾鏡圖.210
8.1.3ffmpeg支持的濾鏡列表.211
8.2簡單濾鏡圖的應用212
8.2.1常用的視頻編輯簡單濾鏡圖212
8.2.2常用的音頻編輯簡單濾鏡圖227
8.3復合濾鏡圖的應用230
8.3.1常用的視頻編輯復合濾鏡圖230
8.3.2常用的音頻編輯復合濾鏡圖234
第9章流媒體應用236
9.1構建SRS流媒體服務.236
9.1.1部署RTMP流媒體服務.238
9.1.2部署HLS流媒體服務240
9.1.3部署HTTP-FLV流媒體服務.241
9.2構建NginxRTMP流媒體服務.241
9.2.1Nginx的編譯和部署242
9.2.2Nginx的流媒體模塊nginx-rtmp-module246
第三部分開發實戰
第10章FFmpegSDK的使用.254
10.1使用CMake構建工程.255
10.1.1使用CMake構建HelloWorld工程255
10.1.2在工程中編譯並輸出多個文件257
10.1.3在工程中添加頭文件和源文件目錄259
10.1.4在工程中引入動態庫.262
10.2FFmpegSDK基本使用方法示例:獲取目錄下的文件信息.264
10.2.1顯示指定目錄信息.264
10.2.2解析API和結構體.266
第11章使用FFmpegSDK進行視頻編解碼269
11.1libavcodec視頻編碼269
11.1.1主函數與數據I/O實現269
11.1.2視頻編碼器初始化272
11.1.3編碼循環體284
11.1.4關閉編碼器289
11.1.5FFmpeg視頻編碼延遲分析.290
11.2libavcodec視頻解碼294
11.2.1主函數實現294
11.2.2視頻解碼器初始化295
11.2.3解碼循環體297
11.2.4關閉解碼器304
第12章使用FFmpegSDK進行音頻編解碼306
12.1libavcodec音頻編碼306
12.1.1主函數實現.306
12.1.2音頻編碼器初始化.307
12.1.3編碼循環體.310
12.1.4關閉編碼器.313
12.2libavcodec音頻解碼315
12.2.1主函數實現.315
12.2.2音頻解碼器初始化.316
12.2.3解碼循環體.318
12.2.4關閉解碼器.324
第13章使用FFmpegSDK進行音視頻文件的解封裝與封裝.326
13.1音視頻文件的解封裝326
13.1.1主函數實現.326
13.1.2解復用器初始化.327
13.1.3循環讀取碼流包數據.335
13.1.4釋放解復用器和解碼器.338
13.1.5主函數的整體實現.339
13.2音頻流與視頻流文件的封裝340
13.2.1主函數實現.340
13.2.2音視頻流復用器的初始化341
13.2.3復用音頻流和視頻流.348
13.2.4釋放復用器實例.353
第14章使用FFmpegSDK添加視頻濾鏡和音頻濾鏡355
14.1視頻濾鏡355
14.1.1主函數實現.355
14.1.2視頻濾鏡初始化.356
14.1.3循環編輯視頻幀.365
14.1.4銷毀視頻濾鏡.368
14.2音頻濾鏡370
14.2.1主函數框架.370
14.2.2音頻濾鏡初始化.371
14.2.3循環編輯音頻幀.380
14.2.4銷毀音頻濾鏡.381
第15章使用FFmpegSDK進行視頻圖像轉換與音頻重采樣.383
15.1視頻圖像轉換383
15.1.1主函數實現.383
15.1.2視頻格式轉換初始化.384
15.1.3視頻的圖像幀循環轉換.388
15.1.4視頻格式轉換結構的銷毀和釋放390
15.2音頻重采樣391
15.2.1主函數實現.392
15.2.2音頻重采樣初始化.392
15.2.3對音頻幀循環重采樣.397
15.2.4音頻重采樣結構的銷毀和釋放400
全書內容分為三部分,共15章。第1~6章為第一部分,主要講解音視頻開發的基礎知識,簡要介紹音視頻技術的發展背景,以及主流的音視頻壓縮編碼算法、音視頻容器格式和網絡流媒體協議等。第7~9章為第二部分,主要講解命令行工具ffmpeg、ffprobe和ffplay的使用方法,包括如何使用這些工具進行視頻播放、格式檢測、編轉碼、格式轉換和流媒體推拉流等操作;第10~15章為第三部分,主要講解基於FFmpegSDK的開發實戰,主要介紹如何在工程中調用libavcodec和libavformat等庫提供的接口實現音視頻處理的相關功能。本書適合從事音視頻編解碼、多媒體應用開發和流媒體技術的初、中級開發者,以及各大院校學生閱讀,也適合有一定經驗的開發人員參考使用。