RTMP協議分析及推流過程

1.RTMP(實時消息傳輸協議)是Adobe 公司開發的一個基於TCP的應用層協議。服務器

2.RTMP協議中基本的數據單元稱爲消息(Message)。網絡

3.當RTMP協議在互聯網中傳輸數據的時候,消息會被拆分紅更小的單元,稱爲消息塊(Chunk)。.net

 

RTMP 握手(Handshake):視頻

 

 

1.握手開始於客戶端發送C0、C1塊。服務器收到C0或C1後發送S0和S1。
2.當客戶端收齊S0和S1後,開始發送C2。當服務器收齊C0和C1後,開始發送S2。
3.當客戶端和服務器分別收到S2和C2後,握手完成。blog

 

在實際工程應用中,通常是客戶端先將C0, C1塊同時發出,服務器在收到C1 以後同時將S0, S1, S2發給客戶端。以後客戶端向服務器端發送C2塊,簡單握手完成。開發

 

創建網絡鏈接(NetConnection):io

 

1. 客戶端發送命令消息中的「鏈接」(connect)到服務器,請求與一個服務應用實例創建鏈接。stream


2. 服務器接收到鏈接命令消息後,發送確認窗口大小(Window Acknowledgement Size)協議消息到客戶端,同時鏈接到鏈接命令中提到的應用程序。音頻


3. 服務器發送設置帶寬協議消息到客戶端。服務器端


4. 客戶端處理設置帶寬協議消息後,發送確認窗口大小(Window Acknowledgement Size)
協議消息到服務器端。


5. 服務端向客戶端發送「流開始」(Stream Begin)。


6. 服務器發送命令消息中的「結果」(_result),通知客戶端鏈接的狀態。

 

創建網絡流(Create Stream):

 

1. 客戶端發送命令消息中的「建立流」(CreateStream)命令到服務器端。
2. 服務器端接收到「建立流」命令後,發送命令消息中的「結果」(_result),通知客戶端流的狀態。

 

播放(Play):

 

 

1. 客戶端發送命令「播放」給服務器
2. 接收到播放命令後,服務器發送設置塊大小(ChunkSize)協議消息給客戶端
3. 服務器發送「stream begin」給客戶端,告訴客戶端流的id
4. 播放命令成功的話,服務器發送命令消息中的「響應狀態」 NetStream.Play.Start & NetStream.Play.Reset,告知客戶端「播放」命令執行成功
5. 服務器發送客戶端要播放的音頻和視頻數據

 

小結:

     關係圖:

 

播放一個RTMP協議的流媒體須要通過如下幾個步驟:

 

下面用wireshark 抓包來分析一下過程:

 

 

 

RTMP 消息結構:

 

RTMP消息塊:

在網絡上傳輸數據時,消息須要被拆分紅較小的數據塊,才適合在相應的網絡環境上傳輸。RTMP協議中規定,消息在網絡上傳輸時被拆分紅消息塊(Chunk)。

 

RTMP 消息分塊:

相關文章
相關標籤/搜索