Real Time
Messaging Protocol(實(shí)時(shí)消息傳送協(xié)議協(xié)議)是Adobe Systems公司為Flash播放器和服務(wù)器之間音頻、視頻和數(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é)議的官方文檔說明,為什么要寫這個(gè)系列文章最大的原因只是對(duì)前一段工作的一個(gè)總結(jié)和回顧,最近兩個(gè)月,實(shí)現(xiàn)了一個(gè)RTMP Server的c++版本,把公司的流媒體服務(wù)和flash無縫對(duì)接起來。希望我的文字能給后來研究這個(gè)協(xié)議的同學(xué)有一定的幫助。
RTMP協(xié)議是一個(gè)基于TCP的高層協(xié)議族,當(dāng)然這個(gè)玩意據(jù)說還有UDP協(xié)議版本的,不過現(xiàn)在還沒有出來,好像Adobe下一版本的FMS會(huì)提供支持。下文將要描述的是TCP協(xié)議版本的協(xié)議。
RTMP協(xié)議的概要理解:
RTMP協(xié)議是為了和flash之間交換信令以及媒體數(shù)據(jù)。為了提高使用效率信令和媒體數(shù)據(jù)都是使用相同的機(jī)制。因?yàn)槭窍嗤臋C(jī)制Adobe就整出來了一些比較搞人的概念,當(dāng)然每個(gè)協(xié)議第一次接觸都是比較難理解的。
在RTMP協(xié)議中信令和媒體數(shù)據(jù)都稱之為Message,在網(wǎng)絡(luò)中傳輸這些Message,為了區(qū)分它們肯定是要加一個(gè)Message head的,所以RTMP協(xié)議也有一個(gè)Message
head,還有一個(gè)問題因?yàn)?/span>RTMP協(xié)議是基于TCP的,由于TCP的包長(zhǎng)度是有限制的(一般來說不超過1500個(gè)字節(jié)),而RTMP的Message長(zhǎng)度是有可能很大的,像一個(gè)視頻幀的包可能會(huì)有幾十甚至幾千K,這個(gè)問題就必然有一個(gè)分片的問題,在RTMP協(xié)議中對(duì)應(yīng)的說法就是chunk,每一個(gè)Message + head都是由一個(gè)和多個(gè)chunk組成的。到這里對(duì)RTMP協(xié)議的概要理解就算完了。