本文描述了從打開一個RTMP流媒體到視音頻數據開始播放的全過程。服務器
注意:RTMP中的邏輯結構網絡
RTMP協議規定,播放一個流媒體有兩個前提步驟:第一步,創建一個網絡鏈接(NetConnection);第二步,創建一個網絡流(NetStream)。其中,網絡鏈接表明服務器端應用程序和客戶端之間基礎的連通關係。網絡流表明了發送多媒體數據的通道。服務器和客戶端之間只能創建一個網絡鏈接,可是基於該鏈接能夠建立不少網絡流。他們的關係如圖所示:.net
1 簡要介紹翻譯
播放一個RTMP協議的流媒體須要通過如下幾個步驟:握手,創建鏈接,創建流,播放。RTMP鏈接都是以握手做爲開始的。創建鏈接階段用於創建客戶端與服務器之間的「網絡鏈接」;創建流階段用於創建客戶端與服務器之間的「網絡流」;播放階段用於傳輸視音頻數據。視頻
2 握手(HandShake)blog
一個RTMP鏈接以握手開始,雙方分別發送大小固定的三個數據塊get
a) 握手開始於客戶端發送C0、C1塊。服務器收到C0或C1後發送S0和S1。io
b) 當客戶端收齊S0和S1後,開始發送C2。當服務器收齊C0和C1後,開始發送S2。stream
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) 在此以後服務器發送客戶端要播放的音頻和視頻數據。
RTMP協議規範(中文翻譯):http://download.csdn.net/detail/leixiaohua1020/6563059
轉:http://blog.csdn.net/leixiaohua1020/article/details/11704355