推薦序一
推薦序二
前言
第1章 音視頻基礎概念 1
1.1 聲音的物理性質 1
1.1.1 聲音是波 1
1.1.2 聲波的三要素 2
1.1.3 聲音的傳播介質 3
1.1.4 迴聲 3
1.1.5 共鳴 4
1.2 數字音頻 4
1.3 音頻編碼 6
1.4 圖像的物理現象 7
1.5 圖像的數值錶示 8
1.5.1 RGB錶示方式 8
1.5.2 YUV錶示方式 9
1.5.3 YUV和RGB的轉化 10
1.6 視頻的編碼方式 10
1.6.1 視頻編碼 10
1.6.2 編碼概念 11
1.7 本章小結 13
第2章 移動端環境搭建 14
2.1 在iOS上如何搭建一個基礎項目 14
2.2 在Android上如何搭建一個基礎項目 21
2.3 交叉編譯的原理與實踐 26
2.3.1 交叉編譯的原理 26
2.3.2 iOS平颱交叉編譯的實踐 27
2.3.3 Android平颱交叉編譯的實踐 33
2.3.4 使用LAME編碼MP3文件 38
2.4 本章小結 42
第3章 FFmpeg的介紹與使用 43
3.1 FFmpeg的編譯與命令行工具的使用 43
3.1.1 FFmpeg的編譯 43
3.1.2 FFmpeg命令行工具的使用 51
3.2 FFmpeg API的介紹與使用 60
3.3 FFmpeg源碼結構 68
3.3.1 libavformat與libavcodec介紹 68
3.3.2 FFmpeg通用API分析 69
3.3.3 調用FFmpeg解碼時用到的函數分析 70
3.3.4 調用FFmpeg編碼時用到的函數分析 71
3.3.5 麵嚮對象的C語言設計 72
3.4 本章小結 74
第4章 移動平颱下的音視頻渲染 75
4.1 AudioUnit介紹與實踐 75
4.2 Android平颱的音頻渲染 84
4.2.1 AudioTrack的使用 85
4.2.2 OpenSL ES的使用 87
4.3 視頻渲染 90
4.3.1 OpenGL ES介紹 90
4.3.2 OpenGL ES的實踐 91
4.3.3 上下文環境搭建 98
4.3.4 OpenGL ES中的紋理 104
4.4 本章小結 109
第5章 實現一款視頻播放器 110
5.1 架構設計 110
5.2 解碼模塊的實現 115
5.3 音頻播放模塊的實現 118
5.3.1 Android平颱的音頻渲染 118
5.3.2 iOS平颱的音頻渲染 119
5.4 畫麵播放模塊的實現 121
5.4.1 Android平颱的視頻渲染 121
5.4.2 iOS平颱的視頻渲染 122
5.5 AVSync模塊的實現 124
5.5.1 維護解碼綫程 124
5.5.2 音視頻同步 125
5.6 中控係統串聯起各個模塊 127
5.6.1 初始化階段 127
5.6.2 運行階段 128
5.6.3 銷毀階段 129
5.7 本章小結 130
第6章 音視頻的采集與編碼 131
6.1 音頻的采集 131
6.1.1 Android平颱的音頻采集 131
6.1.2 iOS平颱的音頻采集 134
6.2 視頻畫麵的采集 137
6.2.1 Android平颱的視頻畫麵采集 137
6.2.2 iOS平颱的視頻畫麵采集 146
6.3 音頻的編碼 156
6.3.1 libfdk_aac編碼AAC 156
6.3.2 Android平颱的硬件編碼器MediaCodec 158
6.3.3 iOS平颱的硬件編碼器AudioToolbox 161
6.4 視頻畫麵的編碼 166
6.4.1 libx264編碼H264 166
6.4.2 Android平颱的硬件編碼器MediaCodec 172
6.4.3 iOS平颱的硬件編碼器 175
6.5 本章小結 184
第7章 實現一款視頻錄製應用 185
7.1 視頻錄製的架構設計 185
7.2 音頻模塊的實現 188
7.2.1 音頻隊列的實現 189
7.2.2 Android平颱的實現 191
7.2.3 iOS平颱的實現 194
7.3 音頻編碼模塊的實現 198
7.3.1 改造編碼器 198
7.3.2 編碼器適配器 199
7.4 畫麵采集與編碼模塊的實現 202
7.4.1 視頻隊列的實現 202
7.4.2 Android平颱畫麵編碼後入隊 203
7.4.3 iOS平颱畫麵編碼後入隊 204
7.5 Mux模塊 205
7.5.1 初始化 206
7.5.2 封裝和輸齣 208
7.5.3 銷毀資源 212
7.6 中控係統串聯起各個模塊 213
7.7 本章小結 214
第8章 音頻效果器的介紹與實踐 215
8.1 數字音頻基礎 215
8.1.1 波形圖 215
8.1.2 頻譜圖 217
8.1.3 語譜圖 219
8.1.4 深入理解時域與頻域 219
8.2 數字音頻處理:快速傅裏葉變換 222
8.3 基本樂理知識 229
8.3.1 樂譜 229
8.3.2 音符的音高與十二平均律 231
8.3.3 音符的時值 233
8.3.4 節拍 233
8.3.5 MIDI格式 234
8.4 混音效果器 235
8.4.1 均衡效果器 236
8.4.2 壓縮效果器 239
8.4.3 混響效果器 240
8.5 效果器實現 243
8.5.1 Android平颱實現效果器 243
8.5.2 iOS平颱實現效果器 252
8.6 本章小結 255
第9章 視頻效果器的介紹與實踐 256
9.1 圖像處理的基本原理 256
9.1.1 亮度調節 257
9.1.2 對比度調節 258
9.1.3 飽和度調節 259
9.2 圖像處理進階 259
9.2.1 圖像的捲積過程 260
9.2.2 銳化效果器 260
9.2.3 高斯模糊算法 262
9.2.4 雙邊濾波算法 263
9.2.5 圖層混閤介紹 264
9.3 使用FFmpeg內部的視頻濾鏡 266
9.3.1 FFmpeg視頻濾鏡介紹 266
9.3.2 濾鏡圖的構建 267
9.3.3 使用與銷毀濾鏡圖 269
9.3.4 常用濾鏡介紹 270
9.4 使用OpenGL ES實現視頻濾鏡 272
9.4.1 加水印 273
9.4.2 添加自定義文字 278
9.4.3 美顔效果器 282
9.4.4 動圖貼紙效果器 284
9.4.5 主題效果器 288
9.5 本章小結 291
第10章 專業的視頻錄製應用實踐 292
10.1 視頻硬件解碼器的使用 292
10.1.1 初始化信息準備 292
10.1.2 VideoToolbox解碼H264 294
10.1.3 MediaCodec解碼H264 298
10.2 音頻效果器的集成 304
10.2.1 Android音效處理係統的實現 305
10.2.2 iOS音效處理係統的實現 308
10.3 一套跨平颱的視頻效果器的設計與實現 309
10.4 將特效處理庫集成到視頻錄製項目中 315
10.4.1 Android平颱特效集成 316
10.4.2 iOS平颱特效集成 321
10.5 本章小結 325
第11章 直播應用的構建 327
11.1 直播場景分析 327
11.2 拉流播放器的構建 329
11.2.1 Android平颱播放器增加後處理過程 329
11.2.2 iOS平颱播放器增加後處理過程 332
11.3 推流器的構建 335
11.4 第三方雲服務介紹 340
11.5 禮物係統的實現 341
11.5.1 Cocos2dX項目的運行原理 342
11.5.2 關鍵API詳解 344
11.5.3 實現一款動畫 348
11.6 聊天係統的實現 350
11.6.1 Android客戶端的WebSocket實現 351
11.6.2 iOS客戶端的WebSocket實現 352
11.7 本章小結 353
第12章 直播應用中的關鍵處理 354
12.1 直播應用的細節分析 354
12.1.1 推流端細節分析 354
12.1.2 拉流端細節分析 355
12.2 推流端的關鍵處理 355
12.2.1 自適應碼率的實踐 356
12.2.2 統計數據保證後續的應對策略 361
12.3 拉流端的關鍵處理 363
12.3.1 重試機製的實踐 364
12.3.2 首屏時間的保證 366
12.3.3 統計數據保證後續的應對策略 370
12.4 本章小結 371
第13章 工欲善其事,必先利其器 372
13.1 Android平颱工具詳解 372
13.1.1 ADB工具的熟練使用 372
13.1.2 MAT工具檢測Java端的內存泄漏 377
13.1.3 NDK工具詳解 387
13.1.4 Native層的內存泄漏檢測 389
13.1.5 breakpad收集綫上Crash 396
13.2 iOS使用Instruments診斷應用 399
13.2.1 Debug Navigator 399
13.2.2 Time Profiler 400
13.2.3 Allocations 402
13.2.4 Leaks 403
13.3 本章小結 405
附錄A 通過Ne10的交叉編譯輸入理解ndk-build 406
附錄B 編碼器的使用細節 415
附錄C 視頻的錶示與編碼 423
· · · · · · (
收起)