RTMP流媒體播放流程解析
本文描述了從開啟一個RTMP流媒體到視音訊資料開始播放的全過程。
注意:RTMP中的邏輯結構
RTMP協議規定,播放一個流媒體有兩個前提步驟:第一步,建立一個網路連線(NetConnection);第二步,建立一個網路流(NetStream)。其中,網路連線代表伺服器端應用程式和客戶端之間基礎的連通關係。網路流代表了傳送多媒體資料的通道。伺服器和客戶端之間只能建立一個網路連線,但是基於該連線可以建立很多網路流。他們的關係如圖所示:
1 簡要介紹
播放一個RTMP協議的流媒體需要經過以下幾個步驟:握手,建立連線,建立流,播放。RTMP連線都是以握手作為開始的。建立連線階段用於建立客戶端與伺服器之間的“網路連線”;建立流階段用於建立客戶端與伺服器之間的“網路流”;播放階段用於傳輸視音訊資料。
2 握手(HandShake)
一個RTMP連線以握手開始,雙方分別傳送大小固定的三個資料塊
a) 握手開始於客戶端傳送C0、C1塊。伺服器收到C0或C1後傳送S0和S1。
b) 當客戶端收齊S0和S1後,開始傳送C2。當伺服器收齊C0和C1後,開始傳送S2。
c) 當客戶端和伺服器分別收到S2和C2後,握手完成。
握手
3建立網路連線(NetConnection)
a) 客戶端傳送命令訊息中的“連線”(connect)到伺服器,請求與一個服務應用例項建立連線。
b) 伺服器接收到連線命令訊息後,傳送確認視窗大小(Window Acknowledgement Size)協議訊息到客戶端,同時連線到連線命令中提到的應用程式。
c) 伺服器傳送設定頻寬()協議訊息到客戶端。
d) 客戶端處理設定頻寬協議訊息後,傳送確認視窗大小(Window Acknowledgement Size)協議訊息到伺服器端。
e) 伺服器傳送使用者控制訊息中的“流開始”(Stream Begin)訊息到客戶端。
f) 伺服器傳送命令訊息中的“結果”(_result),通知客戶端連線的狀態。
建立連線
4建立網路流(NetStream)
a) 客戶端傳送命令訊息中的“建立流”(createStream)命令到伺服器端。
b) 伺服器端接收到“建立流”命令後,傳送命令訊息中的“結果”(_result),通知客戶端流的狀態。
建立流
5 播放(Play)
a) 客戶端傳送命令訊息中的“播放”(play)命令到伺服器。
b) 接收到播放命令後,伺服器傳送設定塊大小(ChunkSize)協議訊息。
c) 伺服器傳送使用者控制訊息中的“streambegin”,告知客戶端流ID。
d) 播放命令成功的話,伺服器傳送命令訊息中的“響應狀態” NetStream.Play.Start & NetStream.Play.reset,告知客戶端“播放”命令執行成功。
e) 在此之後伺服器傳送客戶端要播放的音訊和視訊資料。
播放流