第1章 音視頻基礎知識 1
1.1 視頻編碼 1
1.2 音頻編碼 2
1.3 多媒體播放組件(Android、iOS) 2
1.4 常見的多媒體框架及解決方案 3
1.5 相關知識點 4
1.5.1 幀率 4
1.5.2 分辨率 4
1.5.3 刷新率 4
1.5.4 編碼格式 4
1.5.5 封裝格式 4
1.5.6 碼率 5
1.5.7 畫質與碼率 5
1.5.8 DTS與PTS 5
1.5.9 YUV與RGB 5
1.5.10 視頻幀及音頻幀 5
1.5.11 量化精度 6
1.5.12 采樣率 6
1.5.13 聲道 6
第2章 常用的係統播放器MediaPlayer 8
2.1 狀態圖及生命周期 8
2.2 從創建到setDataSource過程 12
2.2.1 從創建到setDisplay過程 12
2.2.2 創建過程 13
2.2.3 setDataSource過程 16
2.2.4 setDisplay過程 20
2.3 開始prepare後的流程 22
2.4 C++中MediaPlayer的C/S架構 31
第3章 管理調度的服務者MediaPlayerService 40
3.1 Client/Server通過IPC的通信流程圖 40
3.2 相關聯的類圖 42
3.3 産生過程 43
3.4 添加服務的過程 48
3.5 通過BinderDriver和MediaPlayer通信的過程 50
3.6 創建播放器 55
3.7 建立StageFright層交互 58
第4章 StagefrightPlayer(AwesomePlayer) 60
4.1 AwesomePlayer構造過程 60
4.2 AwesomePlayer使用MediaExtractor進行數據解析的過程 66
4.3 AwesomePlayer解碼過程 69
4.3.1 AwesomePlayer中的prepare過程 69
4.3.2 初始化音視頻解碼器過程 73
4.3.3 使用OMXCodec的解碼過程 75
4.4 AwesomePlayer的渲染輸齣過程 80
4.4.1 用一張圖迴顧數據處理過程 80
4.4.2 視頻渲染器構建過程 81
4.4.3 將音頻數據放到Buffer的過程 87
4.4.4 AudioPlayer在AwesomePlayer中的運行過程 91
4.4.5 音視頻同步 93
4.4.6 音視頻輸齣 96
4.5 概要總結 97
第5章 流媒體播放的新生力量NuPlayer 98
5.1 NuPlayer整體結構 98
5.2 NuPlayer的構建過程 100
5.3 NuPlayer的數據解析模塊 102
5.4 NuPlayer的解碼模塊 107
5.5 NuPlayer的渲染模塊 109
第6章 OpenMAX(OMX)框架 118
6.1 Codec部分中的AwesomePlayer到OMX服務 118
6.1.1 OpenMAX與StageFright框架層級的關係 118
6.1.2 OMX的初始化流程 120
6.1.3 OMX中NodeInstance列錶的管理 127
6.1.4 OMX中NodeInstance節點的操作 127
6.1.5 總結AwesomePlayer到OMX服務過程 130
6.2 Codec部分中的OMXCodec與OMX事件迴調流程 131
6.2.1 OMXCodec與OMX callback事件的處理時序圖 132
6.2.2 如何從OMX中分發事件到OMXCodec 133
6.2.3 緩衝區更新過程 135
6.2.4 消息迴調 137
6.3 MediaCodec相關知識 139
6.3.1 MediaCodec的基本認識 139
6.3.2 從創建到Start過程 148
6.3.3 MediaCodec到OMX框架過程 154
6.3.4 MediaCodec硬解碼 158
第7章 FFmpeg項目 161
7.1 FFmpeg簡介 161
7.2 在Windows下編譯FFmpeg 163
7.2.1 MSYS2 164
7.2.2 Yasm 164
7.2.3 開始編譯FFmpeg-3.1.3 166
7.2.4 創建shell編譯腳本 167
7.2.5 編譯動態庫.so 169
7.2.6 編譯靜態庫.a 171
7.3 在Linux下編譯FFmpeg 172
7.3.1 在/etc/profile.d下配置環境變量 172
7.3.2 開始編譯FFmpeg-3.1.3 174
7.3.3 編寫shell腳本 175
7.3.4 編譯動態庫.so 176
7.3.5 編譯靜態庫.a 178
7.4 在Mac OS下編譯FFmpeg 179
7.4.1 下載源碼及配置環境變量 179
7.4.2 開始編譯FFmpeg-3.1.3 183
7.4.3 編寫shell腳本 183
7.4.4 編譯動態庫.so 185
7.4.5 編譯靜態庫.a 187
7.5 FFmpeg常用命令 189
7.5.1 改變幀率、碼率和文件大小 189
7.5.2 調整視頻分辨率 190
7.5.3 裁剪/填充視頻 191
7.5.4 翻轉和鏇轉視頻 193
7.5.5 模糊和銳化視頻 196
7.5.6 畫中畫 197
7.5.7 在視頻上添加文字 201
7.5.8 文件格式轉換 205
7.5.9 時間操作 207
第8章 FFmpeg源碼分析及實戰 208
8.1 FFmpeg常用結構體分析 208
8.1.1 AVFormatConext 209
8.1.2 AVInputFormat 211
8.1.3 AVStream 212
8.1.4 AVCodecContext 215
8.1.5 AVPacket 216
8.1.6 AVCodec 218
8.1.7 AVFrame 219
8.1.8 AVIOContext 222
8.1.9 URLProtocol 223
8.1.10 URLContext 224
8.2 FFmpeg關鍵函數介紹 225
8.2.1 av_register_all函數 225
8.2.2 avformat_alloc_context函數 226
8.2.3 avio_open函數 226
8.2.4 avformat_open_input函數 229
8.2.5 avformat_find_stream_info函數 232
8.2.6 av_read_frame函數 246
8.2.7 av_write_frame函數 252
8.2.8 avcodec_decode_video2函數 256
8.3 FFmpeg案例(代碼實現) 264
8.3.1 利用FFmpeg轉換格式 264
8.3.2 在實時流中抓取圖像 269
8.3.3 在視頻中加入水印 277
8.3.4 FFmpeg音頻解碼 288
8.3.5 FFmpeg視頻解碼 300
8.4 FFPlay原理 308
8.4.1 注冊所有容器格式和Codec 309
8.4.2 打開流文件 309
8.4.3 讀取數據 311
8.4.4 保存數據 318
8.4.5 音視頻同步 322
8.4.6 音視頻輸齣 326
第9章 直播技術 328
9.1 直播原理 328
9.2 直播架構 328
9.3 直播過程 329
9.3.1 采集數據 329
9.3.2 渲染處理 332
9.3.3 編碼數據 333
9.3.4 推流 335
9.3.5 CDN分發 338
9.3.6 拉流 341
9.3.7 播放流數據 341
9.3.8 直播推流完整案例 343
9.4 流媒體服務器搭建 377
9.5 FFmpeg推流到流媒體服務器的過程 384
9.6 直播優化那些事 387
9.6.1 卡頓優化 387
9.6.2 延時優化 388
9.6.3 數據代理優化 389
9.6.4 首屏秒開優化 390
9.6.5 弱網優化 391
9.6.6 運營商劫持優化 391
9.6.7 CDN節點優化 393
第10章 H.264編碼及H.265編碼 395
10.1 H.264編碼框架 395
10.2 H.264編碼原理 395
10.3 H.264碼流分析 397
10.3.1 H.264編碼格式 397
10.3.2 NAL Header 397
10.3.3 H.264的傳輸 399
10.3.4 H.264碼流結構 399
10.3.5 H.264的Level和Profile說明 406
10.4 H.265編碼框架 408
10.4.1 背景知識 408
10.4.2 H.265碼流結構 409
第11章 視頻格式分析 414
11.1 MP4格式分析 414
11.1.1 Box結構 415
11.1.2 MP4總體結構 416
11.1.3 movie(moov)box 416
11.1.4 media box 418
11.1.5 sample table(stbl)box 420
11.2 FLV格式分析 422
11.2.1 FLV文件結構 422
11.2.2 File Header(文件頭) 422
11.2.3 Body 423
11.2.4 Tag 423
11.3 F4V格式分析 428
11.3.1 file type box 429
11.3.2 movie box 430
11.3.3 movie header box 430
11.3.4 track box 430
11.3.5 media box 431
11.3.6 media information box 433
11.3.7 sample table box 433
11.4 TS格式分析 437
11.4.1 TS格式介紹 437
11.4.2 TS流包含的內容 438
11.4.3 TS包頭解析 438
11.4.4 TS包傳輸部分 440
11.4.5 節目專用信息PSI(Program Specific Information) 440
11.5 AVI格式分析 444
11.5.1 AVI整體結構 445
11.5.2 AVI信息塊('hdrl' LIST塊) 446
11.5.3 AVI數據塊('movi' LIST塊) 447
11.5.4 AVI索引塊('idxl'子塊) 448
11.6 ASF格式分析 448
11.6.1 認識ASF 448
11.6.2 ASF文件整體結構 449
· · · · · · (
收起)