Action Message Format - AMF0

摘要


Action Message Format (AMF) 是一種簡潔的二進(jìn)制格式轧邪,通常用于序列化ActionScript object graphs(對象圖刽脖?不會翻譯)。一旦序列化忌愚,AMF編碼的對象圖可用于會話之間持久化以及檢索應(yīng)用程序的公共狀態(tài)曲管,或者允許兩個端通過強(qiáng)類型數(shù)據(jù)的交換進(jìn)行通信。

AMF 0 Data Types


下方是AMF0的16種類型的marker硕糊。marker位占用一個字節(jié)長度院水,用于描述AMF中某種數(shù)據(jù)類型。

marker value remark
number-marker 0x00
boolean-marker 0x01
string-marker 0x02
object-marker 0x03
movieclip-marker 0x04 reserved, not supported
null-marker 0x05
undefined-marker 0x06
reference-marker 0x07
ecma-array-marker 0x08
object-end-marker 0x09
strict-array-marker 0x0A
date-marker 0x0B
long-string-marker 0x0C
unsupported-marker 0x0D
recordset-marker 0x0E reserved, not supported
xml-document-marker 0x0F
typed-object-marker 0x10

抓包分析


因?yàn)?code>AMF0采用的是 big endian (network) byte order癌幕,所以先簡單看看什么是big endian衙耕。

int val = 0x1234;

big endian:
低地址  0------->1------->2   高地址
        +--------+--------+
        |  0x12  |  0x34  |
        +--------+--------+
little endian:
        +--------+--------+
        |  0x34  |  0x12  |
        +--------+--------+
  1. Number
number-type = number-marker DOUBLE

Number
如上圖所示,紅框內(nèi)的是Numbermarker0x00勺远,紫框是Number的數(shù)值,為40 08 00 00 00 00 00 00时鸵,我的電腦是little endian的所以我在內(nèi)存里面看到的相應(yīng)的數(shù)值是00 00 00 00 00 00 08 40胶逢。
我們可以看一下rtmpdump的實(shí)現(xiàn)

char *AMF_EncodeNumber(char *output, char *outend, double dVal)
{
    unsigned char *ci, *co;
    ci = (unsigned char *)&dVal;
    co = (unsigned char *)output;
    co[0] = ci[7];
    co[1] = ci[6];
    co[2] = ci[5];
    co[3] = ci[4];
    co[4] = ci[3];
    co[5] = ci[2];
    co[6] = ci[1];
    co[7] = ci[0];
}
  1. Boolean
boolean-type = boolean-marker U8 ; 0 is false, <> 0 is true

Boolean
如上圖所示厅瞎,紅框內(nèi)的是Booleanmarker0x01,紫框是Boolean的數(shù)值初坠,為0x01和簸,理論上只要非零就是true
rtmpdump的實(shí)現(xiàn)

char * AMF_EncodeBoolean(char *output, char *outend, int bVal)
{
  *output++ = AMF_BOOLEAN;
  *output++ = bVal ? 0x01 : 0x00;
  return output;
}
  1. String
string-type = string-marker UTF-8

String
如上圖所示,紅框內(nèi)的是Stringmarker0x02碟刺,綠框是字符串的長度锁保,值為0x0008,紫框是String的值半沽,為onStatusASCII碼爽柒。
rtmpdump的實(shí)現(xiàn)

char *AMF_EncodeString(char *output, char *outend, const AVal *bv)
{
 *output++ = AMF_STRING;
  output = AMF_EncodeInt16(output, outend, bv->av_len);
  memcpy(output, bv->av_val, bv->av_len);
  output += bv->av_len;
  return output;
}
  1. Object
object-property = (UTF-8 value-type) | (UTF-8-empty object-end-marker)
anonymous-object-type = object-marker *(object-property)

Object類型除了可以包含其他類型之外,也可以包含Object類型者填。

image.png
Object是以Object-End結(jié)束的浩村,值為0x000009

Thanks


  1. rtmpdump占哟,簡直是入門引路者

最終目標(biāo)是實(shí)現(xiàn)RTMP協(xié)議心墅。還好前方有大量牛人實(shí)現(xiàn)過,感覺造輪子的時候榨乎,可以抄一下=怎燥。=
簡單地實(shí)現(xiàn)了一下,代碼地址->amf0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蜜暑,一起剝皮案震驚了整個濱河市刺覆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌史煎,老刑警劉巖谦屑,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異篇梭,居然都是意外死亡氢橙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門恬偷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悍手,“玉大人,你說我怎么就攤上這事袍患√箍担” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵诡延,是天一觀的道長滞欠。 經(jīng)常有香客問我,道長肆良,這世上最難降的妖魔是什么筛璧? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任逸绎,我火速辦了婚禮,結(jié)果婚禮上夭谤,老公的妹妹穿的比我還像新娘棺牧。我一直安慰自己,他們只是感情好朗儒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布颊乘。 她就那樣靜靜地躺著,像睡著了一般醉锄。 火紅的嫁衣襯著肌膚如雪乏悄。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天榆鼠,我揣著相機(jī)與錄音纲爸,去河邊找鬼。 笑死妆够,一個胖子當(dāng)著我的面吹牛识啦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播神妹,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼颓哮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鸵荠?” 一聲冷哼從身側(cè)響起冕茅,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛹找,沒想到半個月后姨伤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡庸疾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年乍楚,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片届慈。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡徒溪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出金顿,到底是詐尸還是另有隱情臊泌,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布揍拆,位于F島的核電站渠概,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏礁凡。R本人自食惡果不足惜高氮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一慧妄、第九天 我趴在偏房一處隱蔽的房頂上張望顷牌。 院中可真熱鬧剪芍,春花似錦、人聲如沸窟蓝。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽运挫。三九已至状共,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谁帕,已是汗流浹背峡继。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匈挖,地道東北人碾牌。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像儡循,于是被迫代替她去往敵國和親舶吗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容