本文描述了從打開一個RTMP流媒體到視音頻數(shù)據(jù)開始播放的全過程。
注意:RTMP中的邏輯結(jié)構(gòu)
RTMP協(xié)議規(guī)定,播放一個流媒體有兩個前提步驟:第一步,建立一個網(wǎng)絡連接(NetConnection);第二步,建立一個網(wǎng)絡流(NetStream)。其中,網(wǎng)絡連接代表服務器端應用程序和客戶端之間基礎的連通關系。網(wǎng)絡流代表了發(fā)送多媒體數(shù)據(jù)的通道。服務器和客戶端之間只能建立一個網(wǎng)絡連接,但是基于該連接可以創(chuàng)建很多網(wǎng)絡流。他們的關系如圖所示:
1 簡要介紹
播放一個RTMP協(xié)議的流媒體需要經(jīng)過以下幾個步驟:握手,建立連接,建立流,播放。RTMP連接都是以握手作為開始的。建立連接階段用于建立客戶端與服務器之間的“網(wǎng)絡連接”;建立流階段用于建立客戶端與服務器之間的“網(wǎng)絡流”;播放階段用于傳輸視音頻數(shù)據(jù)。
2 握手(HandShake)
一個RTMP連接以握手開始,雙方分別發(fā)送大小固定的三個數(shù)據(jù)塊
a) 握手開始于客戶端發(fā)送C0、C1塊。服務器收到C0或C1后發(fā)送S0和S1。
b) 當客戶端收齊S0和S1后,開始發(fā)送C2。當服務器收齊C0和C1后,開始發(fā)送S2。
c) 當客戶端和服務器分別收到S2和C2后,握手完成。
握手
3建立網(wǎng)絡連接(NetConnection)
a) 客戶端發(fā)送命令消息中的“連接”(connect)到服務器,請求與一個服務應用實例建立連接。
b) 服務器接收到連接命令消息后,發(fā)送確認窗口大小(Window Acknowledgement Size)協(xié)議消息到客戶端,同時連接到連接命令中提到的應用程序。
c) 服務器發(fā)送設置帶寬()協(xié)議消息到客戶端。
d) 客戶端處理設置帶寬協(xié)議消息后,發(fā)送確認窗口大小(Window Acknowledgement Size)協(xié)議消息到服務器端。
e) 服務器發(fā)送用戶控制消息中的“流開始”(Stream Begin)消息到客戶端。
f) 服務器發(fā)送命令消息中的“結(jié)果”(_result),通知客戶端連接的狀態(tài)。
建立連接
4建立網(wǎng)絡流(NetStream)
a) 客戶端發(fā)送命令消息中的“創(chuàng)建流”(createStream)命令到服務器端。
b) 服務器端接收到“創(chuàng)建流”命令后,發(fā)送命令消息中的“結(jié)果”(_result),通知客戶端流的狀態(tài)。
建立流
5 播放(Play)
a) 客戶端發(fā)送命令消息中的“播放”(play)命令到服務器。
b) 接收到播放命令后,服務器發(fā)送設置塊大?。–hunkSize)協(xié)議消息。
c) 服務器發(fā)送用戶控制消息中的“streambegin”,告知客戶端流ID。
d) 播放命令成功的話,服務器發(fā)送命令消息中的“響應狀態(tài)” NetStream.Play.Start & NetStream.Play.reset,告知客戶端“播放”命令執(zhí)行成功。
e) 在此之后服務器發(fā)送客戶端要播放的音頻和視頻數(shù)據(jù)。
播放流
RTMP協(xié)議規(guī)范(中文翻譯):http://download.csdn.net/detail/leixiaohua1020/6563059