定 價(jià):99 元
叢書(shū)名:高等學(xué)校計(jì)算機(jī)基礎(chǔ)教育教材精選
- 作者:何俊林
- 出版時(shí)間:2018/11/1
- ISBN:9787121349966
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TN929.53
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
近年來(lái),直播、短視頻行業(yè)的相關(guān)業(yè)務(wù)發(fā)展迅猛,本書(shū)主要介紹其中涉及的Android音視頻開(kāi)發(fā)相關(guān)技術(shù)。本書(shū)一共有11章,分別介紹了音視頻基礎(chǔ)知識(shí)、MediaPlayer、MediaPlayerService、StagefrightPlayer、NuPlayer、OpenMAX框架、FFmpeg項(xiàng)目、FFmpeg源碼分析及實(shí)戰(zhàn)、直播技術(shù)、H.264編碼及H.265編碼、視頻格式分析內(nèi)容。希望本書(shū)能幫助讀者系統(tǒng)學(xué)習(xí)、化繁為簡(jiǎn),在Android音視頻開(kāi)發(fā)的道路上不斷進(jìn)步。本書(shū)適合具有一定Android開(kāi)發(fā)基礎(chǔ)并且對(duì)音視頻技術(shù)方向感興趣的讀者閱讀。
1 一線專家和工程師陸其明、劉望舒 、許建林(Piasy)、房鵬聯(lián)袂力薦
2 詳解了Android音視頻開(kāi)發(fā)相關(guān)技術(shù),從原理到案例展示了音視頻開(kāi)發(fā)的獨(dú)特魅力,包含直播技術(shù)相關(guān)內(nèi)容
3 本書(shū)分別介紹了音視頻基礎(chǔ)知識(shí)、MediaPlayer、MediaPlayerService、StagefrightPlayer、NuPlayer、OpenMAX框架、FFmpeg項(xiàng)目、FFmpeg源碼分析及實(shí)戰(zhàn)、直播技術(shù)、H.264編碼及H.265編碼、視頻格式分析等內(nèi)容
前 言
從來(lái)沒(méi)想到自己能出一本書(shū)。
寫(xiě)書(shū)是一件很考驗(yàn)人耐心的事情,從打算寫(xiě)一本書(shū)開(kāi)始,我心里每時(shí)每刻都像有一塊大石頭壓著一樣。一要保證專業(yè)性,二要保證質(zhì)量,同時(shí)還要考慮怎么表達(dá)才能讓別人明白自己的意思,所以寫(xiě)書(shū)并沒(méi)有那么簡(jiǎn)單。
近年來(lái),直播、短視頻行業(yè)的相關(guān)業(yè)務(wù)發(fā)展迅猛,很多人希望學(xué)習(xí)其中涉及的Android音視頻開(kāi)發(fā)相關(guān)知識(shí),而Android音視頻開(kāi)發(fā)的難度相對(duì)較高,這讓很多Android開(kāi)發(fā)者望而卻步。例如,音視頻開(kāi)發(fā)中很多有特色的或者核心的模塊使用NDK開(kāi)發(fā),而NDK開(kāi)發(fā)又主要使用C/C 語(yǔ)言編寫(xiě)代碼,這對(duì)于使用Java語(yǔ)言的Android開(kāi)發(fā)者來(lái)說(shuō)有門(mén)檻。
我為什么要寫(xiě)這本書(shū)呢?對(duì)于音視頻相關(guān)技術(shù),網(wǎng)絡(luò)上遍布零散的知識(shí)點(diǎn),但沒(méi)有一個(gè)成型的知識(shí)體系。很多朋友想學(xué)習(xí)和了解Android音視頻開(kāi)發(fā),卻不知道如何下手,所以我希望將自己的知識(shí)和經(jīng)驗(yàn)整理成書(shū),幫助讀者系統(tǒng)學(xué)習(xí)、化繁為簡(jiǎn),讓大家在Android音視頻開(kāi)發(fā)的道路上不斷進(jìn)步。
本書(shū)概要
第1章:介紹了音視頻基礎(chǔ)知識(shí),通過(guò)本章學(xué)習(xí)可以了解一些音視頻的基礎(chǔ)概念,讓讀者更好地系統(tǒng)掌握音視頻相關(guān)知識(shí)。
第2章:介紹了Android應(yīng)用層使用的系統(tǒng)播放器MediaPlayer。
第3章:介紹了Android多媒體管理調(diào)度的服務(wù)者M(jìn)ediaPlayerService,以及如何為多媒體播放提供服務(wù)。
第4章:介紹了Android系統(tǒng)中的StagefrightPlayer。在Android系統(tǒng)5.1版本之前,其扮演了重要的角色。
第5章:介紹了Android系統(tǒng)中的NuPlayer,其是流媒體播放的新生力量。在Android系統(tǒng)5.1版本之后(包含5.1版本),NuPlayer基于StagefrightPlayer的基礎(chǔ)類進(jìn)行構(gòu)建,利用了更底層的ALooper/AHandler機(jī)制來(lái)異步解碼播放。
第6章:介紹了OpenMAX(OMX)框架相關(guān)內(nèi)容。OpenMAX是一個(gè)多媒體應(yīng)用程序的標(biāo)準(zhǔn),涉及OpenMAX IL API在Android應(yīng)用程序、多媒體框架和編/解碼庫(kù)及其支持的組件(比如sources和sinks)之間建立統(tǒng)一的接口。
第7章:介紹了FFmpeg庫(kù)在Windows、Mac OS及Linux下編譯并移植的內(nèi)容,同時(shí)介紹了FFmpeg常用的處理音視頻的命令。
第8章:介紹了FFmpeg源碼分析及實(shí)戰(zhàn)開(kāi)發(fā)案例。
第9章:介紹了直播技術(shù),主要涉及直播原理、采集數(shù)據(jù)、編碼、推流、播放等。同時(shí)提供了一個(gè)直播推流完整案例,可以實(shí)現(xiàn)一個(gè)簡(jiǎn)單的直播App。本章還介紹了直播過(guò)程中的優(yōu)化方法,可幫助提升直播體驗(yàn)。
第10章:介紹了H.264碼流結(jié)構(gòu)及H.265碼流結(jié)構(gòu)。在音視頻開(kāi)發(fā)中,可以通過(guò)分析數(shù)據(jù)有無(wú)特殊性問(wèn)題及異常問(wèn)題來(lái)進(jìn)行排查,幫助定位、修復(fù)問(wèn)題。
第11章:介紹了常見(jiàn)的視頻封裝格式,以及對(duì)封裝格式的原理和內(nèi)部結(jié)構(gòu)進(jìn)行了分析。
讀者對(duì)象
本書(shū)適合具有一定Android開(kāi)發(fā)基礎(chǔ)并且對(duì)音視頻技術(shù)方向感興趣的讀者閱讀,包括:
? 從事Android多媒體開(kāi)發(fā)工作的人。
? 從事音視頻開(kāi)發(fā)工作的人。
? 從事跨平臺(tái)Android播放器開(kāi)發(fā)工作的人。
? 從Android開(kāi)發(fā)想進(jìn)階至多媒體、音視頻、直播領(lǐng)域的人。
? 從事Android ROM開(kāi)發(fā)中維護(hù)多媒體播放框架工作的人。
? 對(duì)Android音視頻、播放器、直播技術(shù)感興趣的其他相關(guān)人士。
勘誤和支持
由于作者的水平有限,書(shū)中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,懇請(qǐng)廣大讀者批評(píng)指正。
另外,我在自己的微信公眾號(hào)何俊林中特意添加了一個(gè)新的菜單入口,專門(mén)用于展示書(shū)中的問(wèn)題,歡迎讀者查看。
如果在閱讀本書(shū)的過(guò)程中,讀者有任何疑問(wèn)或希望和我交流,可以在公眾號(hào)后臺(tái)留言或者發(fā)郵件到hejunlin2013@gmail.com,我會(huì)一一回復(fù)。
致謝
首先要感謝我的家人,謝謝你們?cè)趯?xiě)書(shū)期間默默支持著我,還要感謝電子工業(yè)出版社博文視點(diǎn)公司付睿老師的耐心校稿,以及感謝同行朋友與我就細(xì)節(jié)問(wèn)題進(jìn)行討論和對(duì)本書(shū)的審校。沒(méi)有你們,就沒(méi)有本書(shū)的誕生,謝謝你們所有人。
讀者服務(wù)
輕松注冊(cè)成為博文視點(diǎn)社區(qū)用戶(www.broadview.com.cn),掃碼直達(dá)本書(shū)頁(yè)面。
? 提交勘誤:您對(duì)書(shū)中內(nèi)容的修改意見(jiàn)可在 提交勘誤 處提交,若被采納,將獲贈(zèng)博文視點(diǎn)社區(qū)積分(在您購(gòu)買電子書(shū)時(shí),積分可用來(lái)抵扣相應(yīng)金額)。
? 交流互動(dòng):在頁(yè)面下方 讀者評(píng)論 處留下您的疑問(wèn)或觀點(diǎn),與我們和其他讀者一同學(xué)習(xí)交流。
頁(yè)面入口:http://www.broadview.com.cn/34996
何俊林,曾就職于愛(ài)奇藝,先后參與TV播放器業(yè)務(wù)和需求開(kāi)發(fā),以及TV新播放內(nèi)核開(kāi)發(fā)和維護(hù)。主要研究方向?yàn)槎嗝襟w、音視頻、Codec相關(guān)方向。長(zhǎng)期在CSDN上堅(jiān)持寫(xiě)博客,2016獲得CSDN音視頻之星、年度博客之星。愛(ài)好開(kāi)源,樂(lè)于研究和分享技術(shù)。同時(shí)運(yùn)營(yíng)公號(hào)何俊林,超過(guò)4w 人關(guān)注。
目 錄
第1章 音視頻基礎(chǔ)知識(shí)1
1.1 視頻編碼1
1.2 音頻編碼2
1.3 多媒體播放組件(Android、iOS)2
1.4 常見(jiàn)的多媒體框架及解決方案3
1.5 相關(guān)知識(shí)點(diǎn)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 畫(huà)質(zhì)與碼率5
1.5.8 DTS與PTS5
1.5.9 YUV與RGB5
1.5.10 視頻幀及音頻幀5
1.5.11 量化精度6
1.5.12 采樣率6
1.5.13 聲道6
第2章 常用的系統(tǒng)播放器MediaPlayer8
2.1 狀態(tài)圖及生命周期8
2.2 從創(chuàng)建到setDataSource過(guò)程12
2.2.1 從創(chuàng)建到setDisplay過(guò)程12
2.2.2 創(chuàng)建過(guò)程13
2.2.3 setDataSource過(guò)程16
2.2.4 setDisplay過(guò)程20
2.3 開(kāi)始prepare后的流程22
2.4 C 中MediaPlayer的C/S架構(gòu)31
第3章 管理調(diào)度的服務(wù)者M(jìn)ediaPlayerService40
3.1 Client/Server通過(guò)IPC的通信流程圖40
3.2 相關(guān)聯(lián)的類圖42
3.3 產(chǎn)生過(guò)程43
3.4 添加服務(wù)的過(guò)程48
3.5 通過(guò)BinderDriver和MediaPlayer通信的過(guò)程50
3.6 創(chuàng)建播放器55
3.7 建立StageFright層交互58
第4章 StagefrightPlayer(AwesomePlayer)60
4.1 AwesomePlayer構(gòu)造過(guò)程60
4.2 AwesomePlayer使用MediaExtractor進(jìn)行數(shù)據(jù)解析的過(guò)程66
4.3 AwesomePlayer解碼過(guò)程69
4.3.1 AwesomePlayer中的prepare過(guò)程69
4.3.2 初始化音視頻解碼器過(guò)程73
4.3.3 使用OMXCodec的解碼過(guò)程75
4.4 AwesomePlayer的渲染輸出過(guò)程80
4.4.1 用一張圖回顧數(shù)據(jù)處理過(guò)程80
4.4.2 視頻渲染器構(gòu)建過(guò)程81
4.4.3 將音頻數(shù)據(jù)放到Buffer的過(guò)程87
4.4.4 AudioPlayer在AwesomePlayer中的運(yùn)行過(guò)程91
4.4.5 音視頻同步93
4.4.6 音視頻輸出96
4.5 概要總結(jié)97
第5章 流媒體播放的新生力量NuPlayer98
5.1 NuPlayer整體結(jié)構(gòu)98
5.2 NuPlayer的構(gòu)建過(guò)程100
5.3 NuPlayer的數(shù)據(jù)解析模塊102
5.4 NuPlayer的解碼模塊107
5.5 NuPlayer的渲染模塊109
第6章 OpenMAX(OMX)框架118
6.1 Codec部分中的AwesomePlayer到OMX服務(wù)118
6.1.1 OpenMAX與StageFright框架層級(jí)的關(guān)系118
6.1.2 OMX的初始化流程120
6.1.3 OMX中NodeInstance列表的管理127
6.1.4 OMX中NodeInstance節(jié)點(diǎn)的操作127
6.1.5 總結(jié)AwesomePlayer到OMX服務(wù)過(guò)程130
6.2 Codec部分中的OMXCodec與OMX事件回調(diào)流程131
6.2.1 OMXCodec與OMX callback事件的處理時(shí)序圖132
6.2.2 如何從OMX中分發(fā)事件到OMXCodec133
6.2.3 緩沖區(qū)更新過(guò)程135
6.2.4 消息回調(diào)137
6.3 MediaCodec相關(guān)知識(shí)139
6.3.1 MediaCodec的基本認(rèn)識(shí)139
6.3.2 從創(chuàng)建到Start過(guò)程148
6.3.3 MediaCodec到OMX框架過(guò)程154
6.3.4 MediaCodec硬解碼158
第7章 FFmpeg項(xiàng)目161
7.1 FFmpeg簡(jiǎn)介161
7.2 在Windows下編譯FFmpeg163
7.2.1 MSYS2164
7.2.2 Yasm164
7.2.3 開(kāi)始編譯FFmpeg-3.1.3166
7.2.4 創(chuàng)建shell編譯腳本167
7.2.5 編譯動(dòng)態(tài)庫(kù).so169
7.2.6 編譯靜態(tài)庫(kù).a171
7.3 在Linux下編譯FFmpeg172
7.3.1 在/etc/profile.d下配置環(huán)境變量172
7.3.2 開(kāi)始編譯FFmpeg-3.1.3174
7.3.3 編寫(xiě)shell腳本175
7.3.4 編譯動(dòng)態(tài)庫(kù).so176
7.3.5 編譯靜態(tài)庫(kù).a178
7.4 在Mac OS下編譯FFmpeg179
7.4.1 下載源碼及配置環(huán)境變量179
7.4.2 開(kāi)始編譯FFmpeg-3.1.3183
7.4.3 編寫(xiě)shell腳本183
7.4.4 編譯動(dòng)態(tài)庫(kù).so185
7.4.5 編譯靜態(tài)庫(kù).a187
7.5 FFmpeg常用命令189
7.5.1 改變幀率、碼率和文件大小189
7.5.2 調(diào)整視頻分辨率190
7.5.3 裁剪/填充視頻191
7.5.4 翻轉(zhuǎn)和旋轉(zhuǎn)視頻193
7.5.5 模糊和銳化視頻196
7.5.6 畫(huà)中畫(huà)197
7.5.7 在視頻上添加文字201
7.5.8 文件格式轉(zhuǎn)換205
7.5.9 時(shí)間操作207
第8章 FFmpeg源碼分析及實(shí)戰(zhàn)208
8.1 FFmpeg常用結(jié)構(gòu)體分析208
8.1.1 AVFormatConext209
8.1.2 AVInputFormat211
8.1.3 AVStream212
8.1.4 AVCodecContext215
8.1.5 AVPacket216
8.1.6 AVCodec218
8.1.7 AVFrame219
8.1.8 AVIOContext222
8.1.9 URLProtocol223
8.1.10 URLContext224
8.2 FFmpeg關(guān)鍵函數(shù)介紹225
8.2.1 av_register_all函數(shù)225
8.2.2 avformat_alloc_context函數(shù)226
8.2.3 avio_open函數(shù)226
8.2.4 avformat_open_input函數(shù)229
8.2.5 avformat_find_stream_info函數(shù)232
8.2.6 av_read_frame函數(shù)246
8.2.7 av_write_frame函數(shù)252
8.2.8 avcodec_decode_video2函數(shù)256
8.3 FFmpeg案例(代碼實(shí)現(xiàn))264
8.3.1 利用FFmpeg轉(zhuǎn)換格式264
8.3.2 在實(shí)時(shí)流中抓取圖像269
8.3.3 在視頻中加入水印277
8.3.4 FFmpeg音頻解碼288
8.3.5 FFmpeg視頻解碼300
8.4 FFPlay原理308
8.4.1 注冊(cè)所有容器格式和Codec309
8.4.2 打開(kāi)流文件309
8.4.3 讀取數(shù)據(jù)311
8.4.4 保存數(shù)據(jù)318
8.4.5 音視頻同步322
8.4.6 音視頻輸出326
第9章 直播技術(shù)328
9.1 直播原理328
9.2 直播架構(gòu)328
9.3 直播過(guò)程329
9.3.1 采集數(shù)據(jù)329
9.3.2 渲染處理332
9.3.3 編碼數(shù)據(jù)333
9.3.4 推流335
9.3.5 CDN分發(fā)338
9.3.6 拉流341
9.3.7 播放流數(shù)據(jù)341
9.3.8 直播推流完整案例343
9.4 流媒體服務(wù)器搭建377
9.5 FFmpeg推流到流媒體服務(wù)器的過(guò)程384
9.6 直播優(yōu)化那些事387
9.6.1 卡頓優(yōu)化387
9.6.2 延時(shí)優(yōu)化388
9.6.3 數(shù)據(jù)代理優(yōu)化389
9.6.4 首屏秒開(kāi)優(yōu)化390
9.6.5 弱網(wǎng)優(yōu)化391
9.6.6 運(yùn)營(yíng)商劫持優(yōu)化391
9.6.7 CDN節(jié)點(diǎn)優(yōu)化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 Header397
10.3.3 H.264的傳輸399
10.3.4 H.264碼流結(jié)構(gòu)399
10.3.5 H.264的Level和Profile說(shuō)明406
10.4 H.265編碼框架408
10.4.1 背景知識(shí)408
10.4.2 H.265碼流結(jié)構(gòu)409
第11章 視頻格式分析414
11.1 MP4格式分析414
11.1.1 Box結(jié)構(gòu)415
11.1.2 MP4總體結(jié)構(gòu)416
11.1.3 movie(moov)box416
11.1.4 media box418
11.1.5 sample table(stbl)box420
11.2 FLV格式分析422
11.2.1 FLV文件結(jié)構(gòu)422
11.2.2 File Header(文件頭)422
11.2.3 Body423
11.2.4 Tag423
11.3 F4V格式分析428
11.3.1 file type box429
11.3.2 movie box430
11.3.3 movie header box430
11.3.4 track box430
11.3.5 media box431
11.3.6 media information box433
11.3.7 sample table box433
11.4 TS格式分析437
11.4.1 TS格式介紹437
11.4.2 TS流包含的內(nèi)容438
11.4.3 TS包頭解析438
11.4.4 TS包傳輸部分440
11.4.5 節(jié)目專用信息PSI(Program Specific Information)440
11.5 AVI格式分析444
11.5.1 AVI整體結(jié)構(gòu)445
11.5.2 AVI信息塊('hdrl' LIST塊)446
11.5.3 AVI數(shù)據(jù)塊('movi' LIST塊)447
11.5.4 AVI索引塊('idxl'子塊)448
11.6 ASF格式分析448
11.6.1 認(rèn)識(shí)ASF448
11.6.2 ASF文件整體結(jié)構(gòu)449