基本信息
作者: 劉歧 趙文傑
叢書名: 電子與嵌入式係統設計叢書
齣版社:機械工業齣版社
ISBN:9787111592204
上架時間:2018-3-23
齣版日期:2018 年3月
開本:16開
版次:1-1
目錄
本書贊譽
推薦序一
推薦序二
推薦序三
前言
第一部分 FFmpeg的命令行使用篇
第1章 FFmpeg簡介 2
1.1 FFmpeg的定義 2
1.2 FFmpeg的曆史 2
1.3 FFmpeg的基本組成 3
1.4 FFmpeg的編解碼工具ffmpeg 6
1.5 FFmpeg的播放器ffplay 9
1.6 FFmpeg的多媒體分析器ffprobe 9
1.7 FFmpeg編譯 11
1.7.1 FFmpeg之Windows平颱編譯 11
1.7.2 FFmpeg之Linux平颱編譯 13
1.7.3 FFmpeg之OS X平颱編譯 15
1.8 FFmpeg編碼支持與定製 16
1.8.1 FFmpeg的編碼器支持 24
1.8.2 FFmpeg的解碼器支持 25
1.8.3 FFmpeg的封裝支持 27
1.8.4 FFmpeg的解封裝支持 28
1.8.5 FFmpeg的通信協議支持 29
1.9 小結 29
第2章 FFmpeg工具使用基礎 30
2.1 ffmpeg常用命令 30
2.1.1 ffmpeg的封裝轉換 37
2.1.2 ffmpeg的轉碼參數 38
2.1.3 ffmpeg的基本轉碼原理 38
2.2 ffprobe常用命令 40
2.3 ffplay常用命令 50
2.3.1 ffplay常用參數 50
2.3.2 ffplay高級參數 53
2.3.3 ffplay的數據可視化分析應用 57
2.4 小結 59
第3章 FFmpeg 轉封裝 60
3.1 音視頻文件轉MP4格式 60
3.1.1 MP4格式標準介紹 61
3.1.2 MP4分析工具 76
3.1.3 MP4在FFmpeg中的Demuxer 79
3.1.4 MP4在FFmpeg中的Muxer 80
3.2 視頻文件轉FLV 84
3.2.1 FLV格式標準介紹 84
3.2.2 FFmpeg轉FLV參數 89
3.2.3 FFmpeg文件轉FLV舉例 89
3.2.4 FFmpeg生成帶關鍵索引的FLV 91
3.2.5 FLV文件格式分析工具 91
3.3 視頻文件轉M3U8 93
3.3.1 M3U8格式標準介紹 93
3.3.2 FFmpeg轉HLS參數 95
3.3.3 FFmpeg轉HLS舉例 96
3.4 視頻文件切片 105
3.4.1 FFmpeg切片segment參數 105
3.4.2 FFmpeg切片segment舉例 106
3.4.3 FFmpeg使用ss與t參數進行切片 110
3.5 音視頻文件音視頻流抽取 111
3.5.1 FFmpeg抽取音視頻文件中的AAC音頻流 111
3.5.2 FFmpeg抽取音視頻文件中的H.264視頻流 112
3.5.3 FFmpeg抽取音視頻文件中的H.265數據 113
3.6 係統資源使用情況 114
3.7 小結 115
第4章 FFmpeg轉碼 116
4.1 FFmpeg軟編碼H.264與H.265 116
4.1.1 x264編碼參數簡介 117
4.1.2 H.264編碼舉例 118
4.2 FFmpeg硬編解碼 130
4.2.1 Nvidia GPU硬編解碼 130
4.2.2 Intel QSV硬編碼 133
4.2.3 樹莓派硬編碼 137
4.2.4 OS X係統硬編解碼 139
4.3 FFmpeg輸齣MP3 141
4.3.1 MP3編碼參數介紹 141
4.3.2 MP3的編碼質量設置 142
4.3.3 平均碼率編碼參數ABR 144
4.4 FFmpeg輸齣AAC 145
4.4.1 FFmpeg中的AAC編碼器使用 145
4.4.2 FDK AAC第三方的AAC編解碼Codec庫 146
4.4.3 高質量AAC設置 148
4.4.4 AAC音頻質量對比 149
4.5 係統資源使用情況 149
4.6 小結 150
第5章 FFmpeg流媒體 151
5.1 FFmpeg發布與錄製RTMP流 151
5.1.1 RTMP參數說明 152
5.1.2 RTMP參數舉例 152
5.2 FFmpeg錄製RTSP流 159
5.2.1 RTSP參數說明 159
5.2.2 RTSP參數使用舉例 159
5.3 FFmpeg錄製HTTP流 163
5.3.1 HTTP參數說明 163
5.3.2 HTTP參數使用舉例 163
5.3.3 HTTP拉流錄製 166
5.3.4 拉取HTTP中的流錄製FLV 166
5.4 FFmpeg錄製和發布UDP / TCP流 166
5.4.1 TCP與UDP參數說明 166
5.4.2 TCP參數使用舉例 167
5.4.3 TCP/UDP使用小結 172
5.5 FFmpeg推多路流 173
5.5.1 管道方式輸齣多路流 173
5.5.2 tee封裝格式輸齣多路流 174
5.5.3 tee協議輸齣多路流 175
5.6 FFmpeg生成HDS流 176
5.6.1 HDS參數說明 177
5.6.2 HDS使用舉例 177
5.7 FFmpeg生成DASH流 179
5.7.1 DASH參數說明 180
5.7.2 DASH參數使用舉例 180
5.8 小結 181
第6章 FFmpeg濾鏡使用 182
6.1 FFmpeg濾鏡Filter描述格式 182
6.1.1 FFmpeg濾鏡Filter的參數排列方式 182
6.1.2 FFmpeg濾鏡Filter時間內置變量 183
6.2 FFmpeg為視頻加水印 183
6.2.1 文字水印 183
6.2.2 圖片水印 187
6.3 FFmpeg生成畫中畫 189
6.4 FFmpeg視頻多宮格處理 192
6.5 FFmpeg音頻流濾鏡操作 193
6.5.1 雙聲道閤並單聲道 193
6.5.2 雙聲道提取 194
6.5.3 雙聲道轉雙音頻流 195
6.5.4 單聲道轉雙聲道 196
6.5.5 兩個音頻源閤並雙聲道 197
6.5.6 多個音頻閤並為多聲道 198
6.6 FFmpeg音頻音量探測 199
6.6.1 音頻音量獲得 199
6.6.2 繪製音頻波形 200
6.7 FFmpeg為視頻加字幕 201
6.7.1 ASS字幕流寫入視頻流 201
6.7.2 ASS字幕流寫入封裝容器 202
6.8 FFmpeg視頻摳圖閤並 205
6.9 FFmpeg 3D視頻處理 206
6.9.1 stereo3d處理3D視頻 206
6.9.2 3D圖像轉換舉例 207
6.10 FFmpeg定時視頻截圖 208
6.10.1 vframe參數截取一張圖片 208
6.10.2 fps濾鏡定時獲得圖片 209
6.11 FFmpeg生成測試元數據 210
6.11.1 FFmpeg生成音頻測試流 210
6.11.2 FFmpeg生成視頻測試流 211
6.12 FFmpeg對音視頻倍速處理 212
6.12.1 atempo音頻倍速處理 212
6.12.2 setpts視頻倍速處理 213
6.13 小結 215
第7章 FFmpeg采集設備 216
7.1 FFmpeg中Linux設備操作 216
7.1.1 Linux下查看設備列錶 216
7.1.2 Linux采集設備fbdev參數說明 217
7.1.3 Linux采集設備fbdev使用舉例 217
7.1.4 Linux采集設備v4l2參數說明 218
7.1.5 Linux采集設備v4l2使用舉例 218
7.1.6 Linux采集設備x11grab參數說明 220
7.1.7 Linux采集設備x11grab使用舉例 220
7.2 FFmpeg中OS X設備操作 222
7.2.1 OS X下查看設備列錶 223
7.2.2 OS X下設備采集舉例 223
7.3 FFmpeg中Windows設備操作 227
7.3.1 FFmpeg使用dshow采集音視頻設備 227
7.3.2 FFmpeg使用vfwcap采集視頻設備 228
7.3.3 FFmpeg使用gdigrab采集窗口 229
7.4 小結 230
第二部分 FFmpeg的API使用篇
第8章 FFmpeg接口libavformat的使用 232
8.1 音視頻流封裝 232
8.2 音視頻文件解封裝 235
8.3 音視頻文件轉封裝 237
8.4 視頻截取 240
8.5 avio內存數據操作 242
8.6 小結 244
第9章 FFmpeg接口libavcodec的使用 245
9.1 FFmpeg舊接口的使用 245
9.1.1 FFmpeg舊接口視頻解碼 245
9.1.2 FFmpeg舊接口視頻編碼 248
9.1.3 FFmpeg舊接口音頻解碼 251
9.1.4 FFmpeg舊接口音頻編碼 252
9.2 FFmpeg新接口的使用 254
9.2.1 FFmpeg新接口音頻編碼 255
9.2.2 FFmpeg新接口音頻解碼 257
9.2.3 FFmpeg新接口視頻編碼 260
9.2.4 FFmpeg新接口視頻解碼 260
9.3 小結 261
第10章 FFmpeg接口libavfilter的使用 262
10.1 filtergraph和filter簡述 262
10.2 FFmpeg中預留的濾鏡 263
10.2.1 音頻濾鏡 263
10.2.2 視頻濾鏡 265
10.3 avfilter流程圖 271
10.4 使用濾鏡加LOGO操作 272
10.5 小結 275
...
基本信息
- 作者:
- 齣版社:
- ISBN:9787111585824
- 上架時間:2017-12-13
- 齣版日期:2018 年1月
- 開本:16開
- 版次:1-1
- 所屬分類:
目錄
推薦序一
推薦序二
前言
第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
前言
為什麼要寫這本書
整個音視頻領域的架構以及開發已經演進瞭很長時間,從開始的廣電領域,到PC端的音視頻領域,再到本書所介紹的移動端的音視頻領域。尤其在這幾年中,移動端音視頻領域架構的變化是巨大的。在移動互聯網的發展熱潮中,我有幸從事瞭音視頻領域的設計與開發,並且就職於時尚的手機KTV——唱吧,這使得我開發齣來的東西能夠服務於幾億用戶。對於音視頻的移動端的應用,不論是開發還是使用,在近兩年都達到瞭一個高峰,而作為一名工程師,如何高效地開發齣一個音視頻App,是一件非常睏難的事情,特彆是對於不太瞭解音視頻概念的工程師。我從事軟件開發已有7年多的時間,接觸音視頻領域也已經有5年多,在整個開發過程中,不同的時間段會遇到不同的挑戰,尤其是在開始涉足音視頻領域的時候,真可謂舉步維艱。首先,對於音視頻的基礎概念不是特彆清楚,再者在工作中邊學邊做,很難對整個音視頻領域有一個全麵的瞭解,並且市麵上沒有相關成熟的資料從更高的層次來介紹音視頻領域在移動端的演進與發展。這幾年的設計實戰與開發經驗,以及帶新人入門的眾多感觸,讓我有瞭寫這本書的動力,同時也形成瞭這本書的核心內容,我希望通過本書可以幫助更多想要在移動端音視頻領域實現自己想法的工程師,讓大傢可以順利地建立起自己的音視頻App。我非常希望能為剛入門的讀者或者遇到睏難的讀者提供幫助,希望大傢可以享受整個開發的過程,享受自己開發的産品為人們的生活帶來便利的成就感。另外,從整個音視頻開發領域來講,我也十分希望能夠通過本書貢獻齣自己的綿薄之力。
讀者對象
産品經理,這部分讀者可以從中瞭解在移動端進行音視頻開發會遇到的很多問題以及對應的優化策略,例如:如何通過音視頻的統計數據為産品提供更加流暢的策略(視頻觀看的秒開、直播推流的流暢度、視頻上傳的成功率等)。
項目經理,這部分讀者可以瞭解很多時下流行的名詞與概念,不再會因為幾個專業名詞就讓自己不知所措,並且有助於更好地評估音視頻項目開發中的風險與進度。
測試人員,這部分讀者可以學習在音視頻App中由於處理過程不同而導緻的瓶頸問題,書中也提到瞭一些自動化測試相關的命令以及工具,可以對CPU的負載情況、內存的占用情況、內存泄漏問題等進行分析。
架構師與工程師,這部分讀者隻需要一點移動開發經驗就可以閱讀本書瞭。當然如果你已經是一個高級移動開發工程師或者架構師,那麼讀起本書來將更加遊刃有餘。再進一步,如果你已經是移動領域的音視頻開發工程師瞭,那麼恭喜你,我們之間將會有一場關於技術領域內部的對話。
開設相關課程的高等院校。
如何閱讀本書
為瞭避免說教式的講解帶來枯燥乏味的閱讀體驗,本書給齣瞭大量的實例及生産環境下的案例。本書可分為四個部分:,部分是入門,從理論基礎開始講解,終會産生兩個實踐項目;第二部分是提高,基於,部分的項目添加特效,形成一個完整的多媒體項目;第三部分是擴展,結閤當下比較流行的直播場景進行實際案例分析;第四部分是工具,介紹當下大部分可以提高開發以及測試效率的工具。下麵是各個章節的基本介紹。
第1章,介紹音視頻的基礎概念,其中包括音視頻的基礎數據格式、編碼後的數據格式以及不同格式之間的相互轉換等。
第2章,從零開始講解如何搭建一個iOS項目和一個Android項目,並且添加C++支持,因為在音視頻領域的開發中,有相當一部分的代碼需要用C++來編寫,這樣就可以做到兩個平颱(Android和iOS平颱)共用一套代碼倉庫,以提升開發效率。然後講解交叉編譯,因為在音視頻開發過程中會用到很多第三方開源庫,如果將這些庫編譯到我們的項目中,勢必要進行交叉編譯,因此本章會重點講解這些內容。
第3章,探討FFmpeg開源庫。對於音視頻開發來講,FFmpeg開源庫是眾所周知也是普遍使用的。本章首先從編譯開始,接著是命令行使用,再到源碼結構,後是API調用,以層層遞進的方式對FFmpeg開源庫展開介紹。
第4章,講解如何利用各自平颱的AP