理解RTMP協議——簡單認識
本文梳理了RTMP協議的基本概念
訪問
我的部落格
瞭解更多
前言
直播行業的興起,帶動了音視訊相關技術的發展,本文介紹 RTMP 協議,讓人快速理解它。看下面一張視訊直播的大體架構圖,找找 RTMP 的位置,明白 RTMP 扮演的角色與重要性
在上面,RTMP 在視訊直播場景的架構中,擔任了重要的"血管"般的角色
簡單介紹
RTMP(Real Time Messaging Protocol)實時訊息傳送協議是Adobe Systems公司為Flash播放器和伺服器之間音訊、視訊和資料傳輸開發的私有協議。
RTMP是一個應用層協議,有多路複用的特點,傳輸內容有視訊、音訊、控制命令
RTMP 在音視訊相關的協議中,它的突出特點是:連線可靠、低延時
RTMP 基於 TCP
RTMP 是基於TCP的二進位制協議,(順便一提,http為廣泛應用的明文協議之一)
RTMP 預設埠 1935
-
基於 TCP 的好處
- 提高了RTMP的可靠性
- 基於 TCP 的弊端
如果網路條件差時,由於TCP存在重傳的機制,所以導致RTMP存在累計延時。當網路狀態差時,伺服器會將包快取起來,導致累積的延遲,待網路狀況好了,就一起發給客戶端。
解決 RTMP 累計延時的弊端
解決 RTMP 累計延時的弊端的方法:
- 資料下發的角度,服務端上設定對客戶端的緩衝區空間大小,一旦累計的緩衝超過限制,服務端就斷開連線,迫使客戶端在恢復網路時發起重新連線的請求。
- 流媒體推流(上傳)的角度,上傳流媒體的釋出方既可以是伺服器也可以是客戶端App,釋出方發現當前佇列中未處理的的視訊和音訊幀數累計達到一定數目(如50幀),則清空該佇列,直接處理最新的實時資料(嚴格意義上,需要保留關鍵幀,清除預測幀)。
RTMP 的 HTTP 變種與防火牆
rtmp 有三個變種:
- 工作在TCP之上的明文協議,使用埠1935
- RTMPT封裝在HTTP請求之中,可穿越防火牆
- RTMPS類似RTMPT,但使用的是HTTPS連線
穿越防火牆的意思是,可能出於安全考慮,網際網路中某一些網路(比如小區、校園網)的防火牆限制了http/https以外的協議訪問,只允許訪問外網ip的 80 埠與 443 埠,或者還允許其他協議,而明文協議的 rtmp 預設埠 1935 不在防火牆開放訪問的埠中,無法建立連線。出於現實考慮,使用 http/https 封裝 rtmp 協議,增強相容性。
RTMP Server
- FMS Wowza (Flash Media Server),商業產品,Adobe公司的產品,license非常昂貴。wowza最突出的特定是多終端適應性,這個在如今多媒體融合的網路環境下有很強的實用意義。
以下開源專案:
- red5 , java,比較出名
- crtmpserver ,C++
- nginx-rtmp-module ,nginx的輕量模組,一般後端工程師比較熟悉 nginx,上手方便