rtmp協議概述
介紹:
rtmp協議就像乙個用來裝資料報的容器,這些資料可以是amf格式的資料,也可以是flv中的視/音訊資料.
乙個單一的連線可以通過不同的通道傳輸多路網路流.這些通道中的包都是按照固定大小的包傳輸的.
網路連線(connection)
[copy to clipboard]
code:
var videoinstance:video = your_video_instance;
var nc:netconnection = new netconnection();
var ns:netstream = new netstream(nc);
videoinstance.attachvideo(ns);
ns.play("flvname");
預設埠為1935
握手
client → server :向伺服器發出握手請求.這不屬於協議包一部分,該握手請求第乙個位元組為(0×03),其後跟著1536個位元組.經管看上去這部分的內容對於rtmp協議來說並不是至關重要的,但也不可隨意對待.
server → client :伺服器向客戶端回應握手請求.這部分的資料仍然不屬於rtmp協議的部分.該回應的其實位元組仍然為(0x03),但是後邊跟著個長度為1536個位元組 (一共為3072 )的包塊.第乙個1536塊看上去似乎可以是任意內容,甚至好像可以是null都沒有關係.第二個1536的**塊,是上一步客戶端向伺服器端傳送的握手 請求的內容.
client→server:把上一步伺服器向客戶端回應的第二塊1536個位元組的資料塊.
至此客戶端與伺服器端的握手結束,下面將傳送rtmp協議的包內容.
client → server :向伺服器傳送連線包.
server → client :伺服器回應.
... .... 等等... ...
rtmp 資料型別
0×01
chunk size
changes the chunk size for packets
0×02
unknown
anyone know this one?
0×03
bytes read
send every x bytes read by both sides
0×04
ping
ping is a stream control message, has subtypes
0×05
server bw
the servers downstream bw
0×06
client bw
the clients upstream bw
0×07
unknown
anyone know this one?
0×08
audio data
packet containing audio
0×09
video data
packet containing video data
0x0a - 0×11
unknown
anyone know?
0×12
notify
an invoke which does not expect a reply
0×13
shared object
has subtypes
0×14
invoke
like remoting call, used for stream actions too.
shared object 資料型別
0×01
connect
0×02
disconnect
0×03
set attribute
0×04
update data
0×05
update attribute
0×06
send message
0×07
status
0×08
clear data
0×09
delete data
0x0a
delete attribute
0x0b
initial data
rtmp包結構
rtmp包 包含乙個固定長度的包頭和乙個最長為128位元組的包體.包頭可以是下面4種長度的任意一種:12, 8, 4, or 1 byte(s).
第乙個位元組的前兩個bit很重要,它決定了包頭的長度.它可以用掩碼0xc0進行"與"計算.下面的**羅列了可能的包頭長度:
bits
header length
00 12 bytes
01 8 bytes
10 4 bytes
11 1 byte
我們在這裡討論關rtmp包結構的問題並不是非常的詳細.我們在以後有時間會討論關於amf的問題(敬請期待...),其實rtmp包結構就是使用了amf格式.
流
關於流的操作我們需要進一步研究,在論壇中的
http://www.openred5.com/bbs/viewthread.php?tid=175&extra=page%3d1這篇文章研究的還是不錯的,大家可以參考.不過下面可以列乙個關於客戶端向伺服器端傳送流的流程:
client→server :傳送乙個建立流的請求.
server→client :返回乙個表示流的索引號.
client→server :開始傳送.
client→server :傳送視音訊資料報(這些包在同乙個頻道(channel)並用流的索引號來唯一標識).
RTMP協議分析
rtmp協議封包 由乙個包頭和乙個包體組成,包頭可以是4種長度的任意一種 12,8,4,1 byte s 完整的rtmp包頭應該是12bytes,包含了時間戳,amfsize,amftype,streamid資訊,8位元組的包頭只紀錄了時間戳,amfsize,amftype,其他位元組的包頭紀錄資訊...
rtmp 協議詳解
rtmp協議是乙個網際網路tcp ip五層體系結構中應用層的協議。rtmp協議中基本的資料單元稱為訊息 message 當rtmp協議在網際網路中傳輸資料的時候,訊息會被拆分成更小的單元,稱為訊息塊 chunk 1 訊息 2 訊息塊 在網路上傳輸資料時,訊息需要被拆分成較小的資料塊,才適合在相應的網...
RTMP協議分析
用途 大小 byte 含義head type1包頭 timer 3時間戳 amfsize 3資料大小 amftype 1資料型別 streamid 4流id 一 head type 包頭型別 head type占用rtmp包的第乙個位元組,這個位元組裡面記錄了包的型別和包的channelid。hea...