rtmp資料封裝二 AMF

2021-08-25 05:15:14 字數 1529 閱讀 2988

rtmp協議在傳輸script資料onmetadata時使用amf(action message format)格式封裝。

amf_type對應的編號:

[amf_type]+[data length]+[data]

1)字串

amf_string和amf_long_string都是存字串,amf_string的字串的長度佔2個byte,不能超過65536-1,amf_long_string的長度佔4個byte。以amf_string為例:

第乙個byte是2,接著是2個byte的[data length]表示字串的長度,接著是字串的內容。

2)數字

amf_number,第乙個byte是0,接著是4個byte的數字內容。

3)bool值

amf_boolean,第乙個byte是1,接著是1個byte的bool值。

4)陣列

開頭用amf_ecma_array表示,結尾用amf_object_end表示,中間寫入陣列的內容。

amf_ecma_array開頭:第乙個byte是8,接著是4個byte的[array length]表示陣列的成員數。

amf_object_end結尾:2個byte的資料全是0,接著乙個byte是9。

amf_ecma_array的陣列內容裡是先插入乙個字串資料的name,然後再插入乙個具體類似資料的value。

如下面所示的抓包內容就是:

以下是wireshark抓包的結構:

rtmp header

01.. .... = format: 1

..00 0011 = chunk stream id: 3

timestamp delta: 0

timestamp: 0 (calculated)

body size: 219

type id: amf0 data (0x12)

rtmp body

string 'onmetadata'

ecma array (10 items)

amf0 type: ecma array (0x08)

array length: 10

property 'title' string 'ipc'

property 'width' number 640

property 'height' number 480

property 'framerate' number 25

property 'videocodecid' number 7

property 'audiocodecid' number 8

property 'audiodatarate' number 64

property 'audiosamplerate' number 8000

property 'audiosamplesize' number 16

property 'stereo' boolean true

end of object marker

個人部落格**:靈動的指標

RTMP協議分析 二 AMF資料

rtmp包預設的最大長度為128位元組,或通過chunksize改變rtmp包最大長度 當amf資料超過128byte的時候就可能有多個rtmp包組成,如果需要解碼的rtmp包太長則被tcp協議分割成多個tcp包.那麼解碼的時候需要先將包含rtmp包的tcp封包合併,再把合併的資料解碼,解碼後可得到...

RTMP協議分析 二 AMF資料

型別說明 objtype 資料 datasize core string 0x02 2位元組 2位元組的資料紀錄了string的實際長度 core object 0x03 0位元組 開始巢狀0x00000009表示巢狀結束 null 0x05 0位元組 空位元組無意義 core number 0x0...

amf資料解碼

這兩天測試 發現了乙個flex架構 amf協議的站點。別說注入和跨站了,連傳送包和返回包的資料都看不明白,在嘗試各種前端輸入無果後,決定研究一下這個少見的技術組合。flex是用來做flash展示的,主要用來做頁面呈現,不深究 主要是amf協議資料了。通過查詢發現python擁有amf處理模組,ver...