FFMPEG入門詳解——流媒體直播原理及應(yīng)用
鏈接:https://pan.baidu.com/s/1IUPSVVh2eXINc5jnGqSoSA?pwd=42ly?
提取碼:42ly

本書系統(tǒng)講解了流媒體和直播的基礎(chǔ)理論及應(yīng)用,包括RTSP、RTP、RTCP、RTMP、HLS、HTTP-FLV等常用的流媒體協(xié)議,包括Live555、SRS、Nginx-RTMP、ZLMediaKit等開源流媒體直播服務(wù)器。本書為FFmpeg音視頻流媒體系列叢書的第二部。
全書共分為14章:系統(tǒng)講解了流媒體協(xié)議的基礎(chǔ)知識、直播的原理流程及架構(gòu)分析、Live555、SRS、Nginx-RTMP、ZLMediaKit等開源直播點播庫。
書中包含大量的示例,圖文并茂,爭取讓一個音視頻流媒體領(lǐng)域的讀者真正入門,從此開啟流媒體直播編程的大門。本書知識體系比較完整,側(cè)重流媒體與直播的原理講解及應(yīng)用。建議讀者先學(xué)習(xí)FFmpeg音視頻流媒體系列叢書的第一部,即音視頻原理及應(yīng)用。講解過程由淺入深,讓讀者在不知不覺中學(xué)會了流媒體協(xié)議的基礎(chǔ)理論知識,并動手搭建直播平臺。
本書可作為流媒體和直播方向的入門書籍,也可作為高年級本科生和研究生的學(xué)習(xí)參考書籍。
作者簡介
梅會東,一個在音視頻領(lǐng)域摸爬滾打20年的老程序員、培訓(xùn)師、作者,精通多種IT技術(shù)。參與設(shè)計和開發(fā)了多個音視頻項目,包括播放器、視頻服務(wù)器、全套直播系統(tǒng)等。精通多個音視頻開源庫項目,包括FFmpeg、Live555、SRS、Darwin、Nginx、WebRTC、ZLMediaKit等。 目前專注于音視頻流媒體的教育傳播事業(yè),為多家大型國企單位培訓(xùn)音視頻專業(yè)知識。
目錄
第1章流媒體與直播基礎(chǔ)理論
1.1流媒體簡介
1.2流媒體協(xié)議
1.2.1TCP的三次握手與四次揮手
1.2.2視頻流協(xié)議與編解碼器
1.2.3常見的流媒體協(xié)議
1.3直播原理及應(yīng)用
1.3.1視頻直播原理與流程
1.3.2通用的視頻直播模型
1.3.3視頻直播系統(tǒng)的模塊
第2章RTSP流媒體協(xié)議
2.1RTSP簡介
2.1.1RTSP支持
2.1.2RTSP特點
2.2RTSP消息格式
2.2.1請求消息
2.2.2應(yīng)答消息
2.3RTSP交互流程
2.4RTSP重要概念
2.5RTSP重要方法
2.6RTSP狀態(tài)機
2.6.1客戶端狀態(tài)機
2.6.2服務(wù)器端狀態(tài)機
2.7VLC作為RTSP流媒體服務(wù)器
2.8RTSP抓包流程分析
2.8.1安裝Wireshark
2.8.2Wireshark抓取本地localhost的包
2.8.3使用Wireshark抓包分析RTSP交互流程
2.9RTSP與HTTP
2.10SDP
第3章RTP與RTCP流媒體協(xié)議
3.1RTP
3.1.1RTP格式
3.1.2RTP封裝H.264
3.1.3RTP的會話過程
3.1.4RTP的抓包分析
3.2RTCP
3.2.1RTCP的5種分組類型
3.2.2RTCP包結(jié)構(gòu)
3.2.3RTCP的注意事項
3.2.4RTCP的抓包分析
3.3RTP/RTCP與RTSP的關(guān)系
3.4開源庫JRTPLIB簡介
3.4.1Windows 10+VS 2015編譯JRTPLIB
3.4.2Ubuntu 18編譯JRTPLIB
3.4.3使用VS 2015搭建JRTPLIB開發(fā)環(huán)境并收發(fā)包案例解析
3.4.4RTP與H.264的相關(guān)結(jié)構(gòu)體
3.4.5使用JRTPLIB發(fā)送H.264碼流
3.5RTP擴展頭結(jié)構(gòu)
3.5.1RTP單擴展頭
3.5.2RTP多擴展頭
第4章RTMP流媒體協(xié)議
4.1RTMP簡介
4.2RTMP交互流程
4.2.1RTMP握手
4.2.2RTMP建立連接
4.2.3RTMP建立流
4.2.4RTMP播放
4.2.5RTMP相關(guān)名詞解釋
4.3直播推流與拉流
4.3.1直播推流
4.3.2直播拉流
4.4RTMP消息
4.4.1RTMP塊流
4.4.2消息塊格式
4.4.3塊基本頭
4.4.4塊消息頭
4.4.5擴展時間戳
4.4.6消息分塊流程解析
4.4.7協(xié)議控制消息
4.4.8用戶控制消息
4.4.9其他消息類型
第5章HLS流媒體協(xié)議
5.1HLS協(xié)議簡介
5.1.1HLS的索引文件的嵌套
5.1.2HLS服務(wù)器端和客戶端工作流程
5.1.3HLS優(yōu)勢及劣勢
5.1.4HLS主要的應(yīng)用場景
5.2HLS協(xié)議詳細講解
5.2.1m3u8簡介
5.2.2HLS播放模式
5.2.3TS文件
5.3m3u8格式講解
5.4TS與PS格式簡介
5.4.1ES、PES、PS、TS
5.4.2PS/TS編碼基本流程
5.4.3PS/TS碼流小結(jié)
5.5TS碼流詳細講解
5.5.1TS包格式
5.5.2TS碼流分析工具
5.5.3TS碼流結(jié)構(gòu)分析
5.5.4PAT及PMT表格式
5.6PS碼流詳細講解
5.6.1PS碼流結(jié)構(gòu)
5.6.2PS碼流的解析流程
5.7TS格式與m3u8切片
第6章HTTPFLV流媒體協(xié)議
6.1HTTPFLV協(xié)議簡介
6.2HTTP簡介
6.2.1HTTPS簡介
6.2.2HTTP請求內(nèi)容
6.2.3HTTP響應(yīng)內(nèi)容
6.2.4URL簡介
6.3FLV格式簡介
6.3.1FLV格式解析
6.3.2FLV的重要Tag說明
第7章流媒體開源庫簡介
7.1FFmpeg簡介
7.1.1FFmpeg的模塊與命令行工具
7.1.2FFmpeg命令行
7.1.3FFmpeg開發(fā)包
7.2Live555
7.3VLC播放器簡介
7.3.1VLC播放器
7.3.2VLC的功能列表
7.3.3VLC播放網(wǎng)絡(luò)串流
7.4EasyDarwin
7.4.1EasyDarwin開源項目
7.4.2EasyDarwin商業(yè)項目
7.4.3EasyDarwin云平臺
7.5SRS
7.6ZLMediaKit
7.7WebRTC
7.7.1WebRTC架構(gòu)
7.7.2視頻分析
7.7.3聲頻分析
7.7.4瀏覽器支持
7.7.5組成部分
7.7.6重要API
第8章Live555搭建直播平臺
8.1Live555簡介
8.1.1Live555實現(xiàn)本地視頻推流
8.1.2openRTSP客戶端流程
8.2Live555源碼編譯
8.2.1Live555在Ubuntu下的源碼編譯
8.2.2Live555在Windows 10下的源碼編譯
8.3Live555點播服務(wù)器流程分析
第9章EasyDarwin搭建直播平臺
9.1EasyDarwin項目簡介
9.1.1主體框架
9.1.2模塊分類
9.2EasyDarwin的安裝部署
第10章Nginx搭建直播平臺
10.1Nginx項目簡介
10.2Nginx的安裝方式
10.2.1Windows 10下安裝Nginx
10.2.2Windows 10下安裝OpenSSL
10.2.3Ubuntu 18下安裝Nginx
10.2.4CentOS 8下安裝Nginx
10.3編譯rtmp及httpflv模塊
10.3.1Ubuntu 18下編譯nginxrtmpmodule
10.3.2Ubuntu 18下編譯nginxhttpflvmodule
10.3.3Windows 10下編譯nginxhttpflvmodule
10.4nginx.conf配置文件詳細講解
10.4.1Nginx配置文件結(jié)構(gòu)
10.4.2Nginx配置文件的指令解析
10.4.3Nginx配置文件關(guān)于nginxrtmpmodule配置指令詳細講解
第11章SRS搭建直播平臺
11.1SRS項目簡介
11.2SRS源碼安裝與編譯
11.2.1在Ubuntu 18上安裝SRS
11.2.2在CentOS 7上安裝SRS
11.3SRS集群cluster
11.3.1SRS集群簡介
11.3.2SRS集群配置
11.4SRS配置文件詳細講解
11.4.1SRS配置文件的組成結(jié)構(gòu)
11.4.2srs.conf
11.4.3ingest.conf
11.4.4hls.conf
11.5SRS啟用WebRTC播放
11.5.1編譯支持WebRTC的SRS
11.5.2推送RTMP視頻流
11.5.3WebRTC播放視頻流
第12章ZLMediaKit搭建直播平臺
12.1Windows編譯配置ZLMediaKit
12.2Linux編譯安裝ZLMediaKit
12.3ZLMediaKit二次開發(fā)簡介
12.3.1test_httpApi.cpp文件
12.3.2test_pusher.cpp文件
12.3.3lambda函數(shù)介紹
第13章WebRTC網(wǎng)頁直播
13.1WebRTC項目簡介
13.2網(wǎng)絡(luò)打洞STUN和TURN
13.2.1NAT穿透
13.2.2STUN與TURN
13.3WebRTC網(wǎng)頁直播
13.3.1基于Coturn項目的STUN/TURN服務(wù)器搭建
13.3.2搭建信令服務(wù)器SignalMaster
13.3.3安裝Web服務(wù)器Nginx
13.3.4創(chuàng)建基于WebRTC的網(wǎng)頁視頻會話
第14章FFmpeg直播應(yīng)用綜合案例分析
14.1直播系統(tǒng)架構(gòu)簡介
14.2流媒體服務(wù)器的應(yīng)用
14.2.1完整的流媒體服務(wù)器系統(tǒng)
14.2.2開源的流媒體服務(wù)器項目應(yīng)用
14.3使用FFmpeg進行RTMP推流
14.4使用VLC進行RTMP拉流并播放
查看全部↓
前言/序言
近年來,隨著4G、5G網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,流媒體直播應(yīng)用越來越普及,音視頻流媒體方面的開發(fā)崗位也非常多,然而,市面上沒有一本通俗易懂的系統(tǒng)完整的流媒體直播入門書籍。網(wǎng)絡(luò)上的知識雖然不少,但是太散亂,不適合讀者入門。
眾所周知,流媒體與直播知識非常復(fù)雜,入門很難。很多程序員想從事音視頻或流媒體開發(fā),但始終糊里糊涂、不得入門。筆者剛畢業(yè)時,也是一個純讀者,付出了艱苦的努力,終于有一些收獲。借此機會,整理成專業(yè)書籍,希望對讀者帶來幫助,少走彎路。
FFmpeg發(fā)展迅猛,功能強大,命令行也很簡單、很實用,但是有一個現(xiàn)象: 即便使用命令行做出了一些特效,但有時依然不理解原理,不知道具體的參數(shù)是什么含義。音視頻與流媒體是一門很復(fù)雜的技術(shù),涉及的概念、原理、理論非常多,很多初學(xué)者不學(xué)基礎(chǔ)理論,而是直接做項目、看源碼,但往往在看到C/C++的代碼時一頭霧水,不知道代碼到底是什么意思。這是因為沒有學(xué)習(xí)音視頻和流媒體的基礎(chǔ)理論,就如學(xué)習(xí)英語,不學(xué)習(xí)基本單詞,而是天天聽英語新聞,總也聽不懂,所以一定要認真學(xué)習(xí)基礎(chǔ)理論,然后學(xué)習(xí)播放器、轉(zhuǎn)碼器、非編、流媒體直播、視頻監(jiān)控等。
本書主要內(nèi)容
第1章介紹流媒體與直播基礎(chǔ)理論、常用流媒體協(xié)議及直播基礎(chǔ)知識。
第2章介紹RTSP流媒體協(xié)議,講解RTSP的概念、原理、流程、重要消息等。
第3章介紹RTP與RTCP流媒體協(xié)議,包括RTP與RTCP的基礎(chǔ)理論及JRTPLIB開源庫。
第4章介紹RTMP流媒體協(xié)議,包括RTMP的概念、原理、流程等。
第5章介紹HLS流媒體協(xié)議,包括HLS協(xié)議、m3u8格式與切片、TS格式等。
第6章介紹HTTPFLV流媒體協(xié)議,包括FLV格式等。
第7章介紹流媒體開源庫,包括FFmpeg、Live555、SRS、ZLMediaKit等。
第8章介紹Live555搭建直播平臺,包括項目簡介、源碼編譯、點播流程等。
第9章介紹EasyDarwin搭建直播平臺,包括項目簡介、安裝部署等。
第10章介紹Nginx搭建直播平臺,包括項目簡介、源碼編譯、直播平臺搭建等。
第11章介紹SRS搭建直播平臺,包括項目簡介、源碼編譯、直播平臺搭建等。
第12章介紹ZLMediaKit搭建直播平臺,包括項目簡介、源碼編譯、直播平臺搭建等。
第13章介紹WebRTC網(wǎng)頁直播功能,包括項目簡介、網(wǎng)頁直播等。
第14章介紹FFmpeg直播應(yīng)用綜合案例分析,包括推流、直播服務(wù)器、拉流播放等。
閱讀建議
本書是一本適合讀者入門的流媒體和直播的書籍,既有通俗易懂的基本概念,又有豐富的案例和原理分析,圖文并茂,知識體系非常完善。對流媒體和直播的基本概念與原理進行了詳細分析,對重要的概念進行了具體闡述,非常適合初學(xué)者。
本書總共分為兩大部分。
第一部分,第1~6章介紹流媒體基礎(chǔ)協(xié)議,包括RTSP、RTMP、HLS等。
第二部分,第7~14章介紹幾個常用的流媒體開源庫,包括Live555、EasyDarwin、SRS、Nginx、ZLMediaKit等,并搭建直播系統(tǒng)。
建議讀者在學(xué)習(xí)過程中循序漸進,不要跳躍。
本書的知識體系是筆者精心準備的,由淺入深,層層深入,對于抽象復(fù)雜的概念和原理,筆者盡量通過圖文并茂的方式進行講解。從最基礎(chǔ)的流媒體協(xié)議開始,側(cè)重講解原理及流程分析,讀者一定要動手實踐,進行抓包分析,理解流程。后續(xù)逐步講解幾個常用的流媒體開源庫,包括Live555、EasyDarwin、SRS、Nginx、ZLMediaKit、WebRTC等,要用所學(xué)的流媒體直播理論來指導(dǎo)實踐,對每個開源庫要動手編譯安裝,并搭建直播平臺,從中深刻體會流媒體協(xié)議的應(yīng)用。最后進行總結(jié)分析,爭取使所學(xué)的理論升華,做到融會貫通。
致謝
感謝清華大學(xué)出版社責任編輯趙佳霓老師給筆者提出了許多寶貴的建議。
感謝我的家人,特別感謝我的寶貝女兒和妻子,寶貝女兒一天天長大,非??蓯?,妻子承擔了所有的家務(wù),非常辛苦。
感謝我的學(xué)員,群里的學(xué)員越來越多,并經(jīng)常提出很多寶貴意見。隨著培訓(xùn)經(jīng)驗的積累,對知識點的理解也越來越透徹,希望給大家多帶來一些光明,盡量讓大家少走彎路。與大家一起努力,非??鞓?。學(xué)習(xí)是一個過程,沒有終點,唯有堅持。
由于時間倉促,書中難免存在不妥之處,請讀者見諒并提寶貴意見。
梅會東
2023年2月于北京清華園
本書源代碼
查看全部↓