Real Time
Messaging Protocol(實時消息傳送協(xié)議協(xié)議)是Adobe Systems公司為Flash播放器和服務器之間音頻、視頻和數(shù)據(jù)傳輸開發(fā)的私有協(xié)議。
具體使用RTMP的AS代碼大概如下:
var videoInstance:Video = your_video_instance;
var nc:NetConnection = new NetConnection();
var connected:Boolean = nc.connect("rtmp://localhost/myapp");
var ns:NetStream = new NetStream(nc);
videoInstance.attachVideo(ns);
ns.play("flvName");
Adobe也在官方網(wǎng)站已經(jīng)提供了RTMP協(xié)議的官方文檔說明,為什么要寫這個系列文章最大的原因只是對前一段工作的一個總結和回顧,最近兩個月,實現(xiàn)了一個RTMP Server的c++版本,把公司的流媒體服務和flash無縫對接起來。希望我的文字能給后來研究這個協(xié)議的同學有一定的幫助。
RTMP協(xié)議是一個基于TCP的高層協(xié)議族,當然這個玩意據(jù)說還有UDP協(xié)議版本的,不過現(xiàn)在還沒有出來,好像Adobe下一版本的FMS會提供支持。下文將要描述的是TCP協(xié)議版本的協(xié)議。
RTMP協(xié)議的概要理解:
RTMP協(xié)議是為了和flash之間交換信令以及媒體數(shù)據(jù)。為了提高使用效率信令和媒體數(shù)據(jù)都是使用相同的機制。因為是相同的機制Adobe就整出來了一些比較搞人的概念,當然每個協(xié)議第一次接觸都是比較難理解的。
在RTMP協(xié)議中信令和媒體數(shù)據(jù)都稱之為Message,在網(wǎng)絡中傳輸這些Message,為了區(qū)分它們肯定是要加一個Message head的,所以RTMP協(xié)議也有一個Message
head,還有一個問題因為RTMP協(xié)議是基于TCP的,由于TCP的包長度是有限制的(一般來說不超過1500個字節(jié)),而RTMP的Message長度是有可能很大的,像一個視頻幀的包可能會有幾十甚至幾千K,這個問題就必然有一個分片的問題,在RTMP協(xié)議中對應的說法就是chunk,每一個Message + head都是由一個和多個chunk組成的。到這里對RTMP協(xié)議的概要理解就算完了。