1、視頻推流端(SDK軟件工具)前端
1.用戶視頻採集git
AVFoundation架構:是用來播放和建立實時的視聽媒體數據的框架,同時提供Objective-C接口來操做這些視聽數據,好比編輯,旋轉,重編碼。github
2. 視頻處理框架 數據庫
GPUImage架構:是一個基於OpenGL ES的一個強大的圖像/視頻處理框架,封裝好了各類濾鏡同時也能夠編寫自定義的濾鏡,其自己內置了多達120多種常見的濾鏡效果。緩存
3.視頻編碼解碼服務器
FFmpeg架構:是一個跨平臺的開源視頻框架,能實現如視頻編碼,解碼,轉碼,串流,播放等豐富的功能。其支持的視頻格式以及播放協議很是豐富,幾乎包含了全部音視頻編解碼、封裝格式以及播放協議。網絡
X264架構:把視頻原數據YUV編碼壓縮成H.264格式。架構
4.視頻封裝格式併發
TS : 一種流媒體封裝格式,流媒體封裝有一個好處,就是不須要加載索引再播放,大大減小了首次載入的延遲,若是片子比較長,mp4文件的索引至關大,影響用戶體驗爲何要用TS
:這是由於兩個TS片斷能夠無縫拼接,播放器能連續播放。負載均衡
FLV
: 一種流媒體封裝格式,因爲它造成的文件極小、加載速度極快,使得網絡觀看視頻文件成爲可能,所以FLV格式成爲了當今主流視頻格式。
5.視頻推流
Librtmp:用來傳輸RTMP協議格式的數據。
RTMP
:實時消息傳輸協議,Adobe Systems公司爲Flash播放器和服務器之間音頻、視頻和數據傳輸開發的開放協議。
2、服務器架構
1.數據分發(CDN)
CDN
:(Content Delivery Network),即內容分發網絡,將網站的內容發佈到最接近用戶的網絡」邊緣」,使用戶能夠就近取得所需的內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度.
CDN工做原理
:好比請求流媒體數據
回源
:當有用戶訪問某一個URL的時候,若是被解析到的那個CDN節點沒有緩存響應的內容,或者是緩存已經到期,就會回源站
去獲取搜索。若是沒有人訪問,那麼CDN節點不會主動去源站
拿.帶寬
:在固定的時間可傳輸的數據總量,好比64位、800MHz的前端總線,它的數據傳輸率就等於64bit×800MHz÷8(Byte)=6.4GB/s負載均衡
: 由多臺服務器以對稱的方式組成一個服務器集合,每臺服務器都具備等價的地位,均可以單獨對外提供服務而無須其餘服務器的輔助,經過某種負載分擔技術,將外部發送來的請求均勻分配到對稱結構中的某一臺服務器上,而接收到請求的服務器獨立地迴應客戶的請求。均衡負載可以平均分配客戶請求到服務器列陣,籍此提供快速獲取重要數據,解決大量併發訪問服務問題。這種羣集技術能夠用最少的投資得到接近於大型主機的性能。QoS(帶寬管理)
:限制每個組羣的帶寬,讓有限的帶寬發揮最大的效用。2.架構選型
Web層:Nginx+PHP-FPM,開發迅速,適合團隊技術現狀,但須要針對服務器,作必定的調優配置。
3、視頻拉流播放端
直播協議選擇
:
RTMP
,RTSP
HLS
直播協議對比
:
HLS
:由Apple公司定義的用於實時流傳輸的協議,HLS基於HTTP協議實現,傳輸內容包括兩部分,一是M3U8描述文件,二是TS媒體文件。可實現流媒體的直播和點播,主要應用在iOS系統
以點播的技術方式
來實現直播自適應碼率流播
,客戶端會根據網絡情況自動選擇不一樣碼率的視頻流,條件容許的狀況下使用高碼率,網絡繁忙的時候使用低碼率,而且自動在兩者間隨意切HLS與RTMP對比
:HLS主要是延時比較大,RTMP主要優點在於延時低
HTTP-FLV
:基於HTTP協議流式的傳輸媒體內容。
RTSP
:實時流傳輸協議,定義了一對多應用程序如何有效地經過IP網絡傳送多媒體數據.RTP
:實時傳輸協議,RTP是創建在UDP協議上的,常與RTCP一塊兒使用,其自己並無提供按時發送機制或其它服務質量(QoS)保證,它依賴於低層服務去實現這一過程。RTCP
:RTP的配套協議,主要功能是爲RTP所提供的服務質量(QoS)提供反饋,收集相關媒體鏈接的統計信息,例如傳輸字節數,傳輸分組數,丟失分組數,單向和雙向網絡延遲等等。
1.解碼
* 1.1 解封裝 *
demuxing(分離)
:從視頻流、音頻流,字幕流合成的文件(容器格式(FLV,TS)
)中, 分解出視頻、音頻或字幕,各自進行解碼。
* 1.2 音頻編碼框架 *
fdk_aac
:音頻編碼解碼框架,PCM音頻數據和AAC音頻數據互轉
* 1.3 解碼介紹 *
硬解碼
:用GPU來解碼,減小CPU運算
軟解碼
:用CPU來解碼
2.播放
3.聊天互動