1. 程式人生 > >RTMP流媒體播放流程解析

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)        在此之後伺服器傳送客戶端要播放的音訊和視訊資料。

播放流