FFmpeg 音視頻開發基礎與實戰

殷汶傑

  • 出版商: 電子工業
  • 出版日期: 2022-01-01
  • 定價: $648
  • 售價: 8.5$551
  • 語言: 簡體中文
  • 頁數: 416
  • ISBN: 7121425556
  • ISBN-13: 9787121425554
  • 銷售排行: 🥈 2022/4 簡體中文書 銷售排行 第 2 名

    下單後立即進貨 (約4週~6週)

買這商品的人也買了...

商品描述

全書內容分為三部分,共15 章。第1~6 章為第一部分,主要講解音視頻開發的基礎知識,簡要介紹音視頻技術的發展背景,以及主流的音視頻壓縮編碼算法、音視頻容器格式和網絡流媒體協議等。第7~9章為第二部分,主要講解命令行工具ffmpeg、ffprobe 和ffplay 的使用方法,包括如何使用這些工具進行視頻播放、格式檢測、編轉碼、格式轉換和流媒體推拉流等操作;第10~15 章為第三部分,主要講解基於FFmpeg SDK 的開發實戰,主要介紹如何在工程中調用libavcodec 和libavformat 等庫提供的接口實現音視頻處理的相關功能。本書適合從事音視頻編解碼、多媒體應用開發和流媒體技術的初、中級開發者,以及各大院校學生閱讀,也適合有一定經驗的開發人員參考使用。

作者簡介

殷汶傑,2013年畢業於上海大學信息與通信工程學院,主要研究方向為視頻壓縮編碼、流媒體技術,其間發表多篇高水ping學術論文與技術提案。具有多家一線互聯網上市公司、世界五百強企業與行業獨角獸公司的核心開發工作經驗,申請多項專利(其中一項國際專利)。發表數百篇技術博客以及多部線上教學課程,在行業內具有較強技術影響力。

目錄大綱

第一部分 基礎知識
第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.264 ........................................................................................... 28
3.4.1 H.264 簡介 ................................................................................................ 28
3.4.2 H.264 的框架 ............................................................................................ 28
3.4.3 H.264 的基本算法 ..................................................................................... 30
3.5 高效視頻編碼標準H.265.................................................................................... 33
3.5.1 H.265 簡介 ................................................................................................ 33
3.5.2 H.265 的框架 ............................................................................................ 33
3.5.3 H.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 採樣和量化 .............................................................................................. 44
4.3 脈衝編碼調製 ...................................................................................................... 46
4.3.1 PCM 量化區間分割 .................................................................................. 46
4.3.2 PCM 量化編碼規則 .................................................................................. 49
4.4 MP3 格式與MP3 編碼標準 ................................................................................ 51
4.4.1 MP3 格式 ................................................................................................... 52
4.4.2 MP3 編碼標準 ........................................................................................... 62
4.5 AAC 格式與AAC 編碼標準 ............................................................................... 67
4.5.1 AAC 格式 .................................................................................................. 67
4.5.2 AAC 編碼標準 .......................................................................................... 72

第5 章 音視頻文件容器和封裝格式 ............................................................................. 74
5.1 概述 ...................................................................................................................... 74
5.2 FLV 格式 .............................................................................................................. 75
5.2.1 FLV 文件結構 ........................................................................................... 75
5.2.2 FLV 文件頭 ............................................................................................... 76
5.2.3 FLV 標籤 ................................................................................................... 77
5.3 MPEG-TS 格式 .................................................................................................... 84
5.3.1 信息包頭 ................................................................................................... 84
5.3.2 PES 包結構 ............................................................................................... 85
5.3.3 PSI 結構 ..................................................................................................... 87
5.4 MP4 格式 ............................................................................................................. 88
5.4.1 MP4 格式簡介 ........................................................................................... 88
5.4.2 ISO 協議族 ................................................................................................ 89
5.4.3 MP4 封裝格式 ........................................................................................... 89
5.4.4 Box 類型 .................................................................................................... 90
5.4.5 MP4 文件結構 ........................................................................................... 92
5.4.6 構建視頻流的播放時間軸 ....................................................................... 98

第6 章 音視頻流媒體協議 ......................................................................................... 104
6.1 網絡協議模型 .................................................................................................... 105
6.1.1 ISO/OSI 模型結構 .................................................................................. 105
6.1.2 TCP/IP 模型結構 .................................................................................... 106
6.2 網絡流媒體協議——RTMP .............................................................................. 120
6.2.1 RTMP 的概念 .......................................................................................... 120
6.2.2 RTMP 分塊與塊流 .................................................................................. 121
6.2.3 RTMP 信息格式 ...................................................................................... 126
6.2.4 RTMP 信息與命令 .................................................................................. 129
6.3 網絡流媒體協議——HLS 協議 ........................................................................ 136
6.3.1 HLS 協議的概念 ..................................................................................... 136
6.3.2 HLS 直播流媒體系統結構 ..................................................................... 136
6.3.3 HLS 索引文件格式 ................................................................................. 138

第二部分 命令行工具
第7 章 FFmpeg 的基本操作 ...................................................................................... 144
7.1 FFmpeg 概述 ..................................................................................................... 144
7.1.1 各個編譯類型的區別 ............................................................................. 145
7.1.2 編譯FFmpeg 源代碼 .............................................................................. 148
7.2 ffplay 的基本使用方法 ...................................................................................... 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.3 ffprobe 的基本使用方法 .................................................................................... 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.4 ffmpeg 的基本使用方法 .................................................................................... 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.9 ffmpeg 封裝格式轉換 ............................................................................. 188
7.4.10 視頻的解碼和編碼 ............................................................................... 193
7.4.11 從視頻中截取圖像 ................................................................................ 206
7.4.12 ffmpeg 視頻轉碼 ................................................................................... 207

第8 章 濾鏡圖 ........................................................................................................... 209
8.1 ffmpeg 音視頻濾鏡 ............................................................................................ 209
8.1.1 簡單濾鏡圖 ............................................................................................. 209
8.1.2 複合濾鏡圖 ............................................................................................. 210
8.1.3 ffmpeg 支持的濾鏡列表 ......................................................................... 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 構建Nginx RTMP 流媒體服務 ......................................................................... 241
9.2.1 Nginx 的編譯和部署 .............................................................................. 242
9.2.2 Nginx 的流媒體模塊nginx-rtmp-module .............................................. 246

第三部分 開發實戰
第10 章 FFmpeg SDK 的使用................................................................................... 254
10.1 使用CMake 構建工程 ..................................................................................... 255
10.1.1 使用CMake 構建Hello World 工程 .................................................... 255
10.1.2 在工程中編譯並輸出多個文件 ............................................................ 257
10.1.3 在工程中添加頭文件和源文件目錄 .................................................... 259
10.1.4 在工程中引入動態庫 ........................................................................... 262
10.2 FFmpeg SDK 基本使用方法示例:獲取目錄下的文件信息 ....................... 264
10.2.1 顯示#目錄信息 ............................................................................... 264
10.2.2 解析API 和結構體 ............................................................................... 266

第11 章 使用FFmpeg SDK 進行視頻編解碼 ............................................................ 269
11.1 libavcodec 視頻編碼 ........................................................................................ 269
11.1.1 主函數與數據I/O 實現 ........................................................................ 269
11.1.2 視頻編碼器初始化 ................................................................................ 272
11.1.3 編碼循環體............................................................................................ 284
11.1.4 關閉編碼器............................................................................................ 289
11.1.5 FFmpeg 視頻編碼延遲分析 ................................................................. 290
11.2 libavcodec 視頻解碼 ........................................................................................ 294
11.2.1 主函數實現............................................................................................ 294
11.2.2 視頻解碼器初始化 ................................................................................ 295
11.2.3 解碼循環體............................................................................................ 297
11.2.4 關閉解碼器............................................................................................ 304

第12 章 使用FFmpeg SDK 進行音頻編解碼 ............................................................ 306
12.1 libavcodec 音頻編碼 ........................................................................................ 306
12.1.1 主函數實現 ........................................................................................... 306
12.1.2 音頻編碼器初始化 ............................................................................... 307
12.1.3 編碼循環體 ........................................................................................... 310
12.1.4 關閉編碼器 ........................................................................................... 313
12.2 libavcodec 音頻解碼 ........................................................................................ 315
12.2.1 主函數實現 ........................................................................................... 315
12.2.2 音頻解碼器初始化 ............................................................................... 316
12.2.3 解碼循環體 ........................................................................................... 318
12.2.4 關閉解碼器 ........................................................................................... 324

第13 章 使用FFmpeg SDK 進行音視頻文件的解封裝與封裝 ................................... 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 章 使用FFmpeg SDK 添加視頻濾鏡和音頻濾鏡 .............................................. 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 章 使用FFmpeg SDK 進行視頻圖像轉換與音頻重採樣 ................................... 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