
RTMP協議規定:第一步,建立一個網絡連接(NetConnection):客戶端和服務端的基礎連通關系 第二步:建立一個網絡流(NetStream)發送多媒體的通道(只能建立一個網絡連接,可以建立多個網絡流)
播放一個RTMP協議的流媒體:1.握手 2.建立連接 3.建立流 4.播放 RTMP連接都是以握手作為開始的。建立連接階段用於建立客戶端與服務器之間的“網絡連接”;建立流階段用於建立客戶端與服務器之間的“網絡流”;播放階段用於傳輸視音頻數據。
1.握手(HandShake)
一個RTMP連接以握手開始,雙方分別發送大小固定的三個數據塊
a)握手開始於客戶端發送C0、C1塊。服務器收到C0或C1后發送S0和S1。
b)當客戶端收齊S0和S1后,開始發送C2。當服務器收齊C0和C1后,開始發送S2。
c)當客戶端和服務器分別收到S2和C2后,握手完成。

2.建立網絡連接(NetConnection)
a)客戶端發送命令消息中的“連接”(connect)到服務器,請求與一個服務應用實例建立連接。
b)服務器接收到連接命令消息后,發送確認窗口大小(Window Acknowledgement Size)協議消息到客戶端,同時連接到連接命令中提到的應用程序。
c)服務器發送設置帶寬()協議消息到客戶端。
d)客戶端處理設置帶寬協議消息后,發送確認窗口大小(Window Acknowledgement Size)協議消息到服務器端。
e)服務器發送用戶控制消息中的“流開始”(Stream Begin)消息到客戶端。
f) 服務器發送命令消息中的“結果”(_result),通知客戶端連接的狀態。

3.建立網絡流(NetStream)
a) 客戶端發送命令消息中的“創建流”(createStream)命令到服務器端。
b)服務器端接收到“創建流”命令后,發送命令消息中的“結果”(_result),通知客戶端流的狀態。

4 播放(Play)
a) 客戶端發送命令消息中的“播放”(play)命令到服務器。
b)接收到播放命令后,服務器發送設置塊大小(ChunkSize)協議消息。
c)服務器發送用戶控制消息中的“streambegin”,告知客戶端流ID。
d)播放命令成功的話,服務器發送命令消息中的“響應狀態” NetStream.Play.Start & NetStream.Play.reset,告知客戶端“播放”命令執行成功。
e) 在此之后服務器發送客戶端要播放的音頻和視頻數據。

網絡視音頻服務主要包括兩種方式:點播和直播。點播意即根據用戶的需要播放相應的視頻節目,這是互聯網視音頻服務最主要的方式。絕大部分視頻網站都提供了。點播服務。直播意即互聯網視音頻平台直接將視頻內容實時發送給用戶,目前還處於發展階段。直播在網絡電視台,社交視頻網站較為常見。
直播服務普遍采用了RTMP作為流媒體協議,FLV作為封裝格式,H.264作為視頻編碼格式,AAC作為音頻編碼格式。采用RTMP作為直播協議的好處在於其被Flash播放器支持。而Flash播放器如今已經安裝在全球99%的電腦上,並且與瀏覽器結合的很好。因此這種流媒體直播平台可以實現“無插件直播”,極大的簡化了客戶端的操作。封裝格式,視頻編碼,音頻編碼方面,無一例外的使用了FLV + H.264 +AAC的組合。FLV是RTMP使用的封裝格式,H.264是當今實際應用中編碼效率最高的視頻編碼標准,AAC則是當今實際應用中編碼效率最高的音頻編碼標准。視頻播放器方面,都使用了Flash播放器
點播服務普遍采用了HTTP作為流媒體協議,H.264作為視頻編碼格式,AAC作為音頻編碼格式。采用HTTP作為點播協議有以下兩點優勢:一方面,HTTP是基於TCP協議的應用層協議,媒體傳輸過程中不會出現丟包等現象,從而保證了視頻的質量;另一方面,HTTP被絕大部分的Web服務器支持,因而流媒體服務機構不必投資購買額外的流媒體服務器,從而節約了開支。點播服務采用的封裝格式有多種:MP4,FLV,F4V等,它們之間的區別不是很大。視頻編碼標准和音頻編碼標准是H.264和AAC。這兩種標准分別是當今實際應用中編碼效率最高的視頻標准和音頻標准。視頻播放器方面,無一例外的都使用了Flash播放器