00000000 00 03 00 00 00 01 00 1d 45 78 61 6d 70 6c 65 53 ExampleS 00000010 65 72 76 69 63 65 2f 72 65 74 75 72 6e 4f 6e 65 ervice/returnOne 00000020 50 61 72 61 6d 00 02 2f 31 00 00 00 3d 0a 00 00 Param /1 = 00000030 00 01 11 0a 0b 0d 6d 79 54 79 70 65 11 61 72 72 myType arr 00000040 61 79 56 61 6c 09 07 01 04 01 04 02 06 07 65 72 ayVal er 00000050 74 13 73 74 72 69 6e 67 56 61 6c 06 07 62 6c 61 t stringVal bla 00000060 0d 69 6e 74 56 61 6c 04 02 intVal
這裏注意一個問題,AMF 數據打包是按照 AMF 0 標準來打包的,因此雖然頭部版本號是 00 03,頭部和消息的數據體依然是默認按 AMF 0 來開始解析,直到你遇到了類型爲 11 (十進制 17 )的類型標記,以它標記的數據纔是 AMF 3 格式的。咱們以上面的數據內容作一下人工解析: 數組
0a 00 00 00 01 11 0a 0b 0d 6d 79 54 79 70 65 11 61 72 72 61 79 56 61 6c 09 07 01 04 01 04 02 06 07 65 72 74 13 73 74 72 69 6e 67 56 61 6c 06 07 62 6c 61 0d 69 6e 74 56 61 6c 04 02
AMF 格式的數據類型分爲兩種,一種是 AMF 0 規定的數據類型,另外一種就是 AMF 3 規定的數據類型。它們之間是經過 AMF0 中一個特殊的類型 0x11 (類型編碼爲 17)來進行轉換的。也就是說,在按 AMF 0 解析內容時,若是遇到類型的編碼爲 0x11 的項目,那就說明這個項目是 AMF3 格式的對象了,咱們須要按 AMF 3 格式對其內容進行解析。編碼
先看 AMF 0 的數據類型( 2006 版):spa
再看 AMF 3 的類型( 2013 版):3d
爲啥 AMF3 會有兩個 XML 支持,這個問 Adobe 去,反正不是我規定的。每一個 AMF 格式的數據實際上都是有一個一個字節的類型標誌開始,後跟這個類型格式約定的具體值。code
一、雙精度浮點數視頻
類型編號:0對象
格式:IEEE-754 的8字節 BE 編碼索引
二、布爾ip
類型編號:1文檔
格式:單字節
備註:0 爲 false,其它值爲 true
三、字符串
類型編號:2
格式:[字符串長度][字符串內容]
備註:字符串長度爲兩個字節的 WORD 類型(BE編碼),字符串內容是 UTF-8 編碼
四、對象類型
類型編號:3
格式:[[屬性名稱][對象結束類型標記|屬性值]]…
備註:首先是第一個屬性的名稱,而後是屬性的值或者對象結束標記(09),若是遇到對象結束標記,則對象屬性定義結束。
五、視頻剪輯
類型編號:4
格式:官方未提供支持
六、NULL 類型
類型編號:5
格式:無附加內容
七、未定義類型(Undefined)
類型編號:6
格式:無附加內容
八、引用類型
類型編號:7
格式:引用的複合類型索引(匿名對象、特定類型對象、數組或混合數組,BE編碼)
九、複合數組
類型編號:8
格式:[元素數量][元素*元素數量]
備註:元素數量爲32位無符號整數,後面跟每個元素的定義
十、對象結束
類型編號:9
格式:00 00
備註:能夠認爲是長度爲 0 的 UTF8 字符串,應用於對象和數組等複合類型
十一、嚴格數組
類型編號:10
格式:[元素數量][元素*元素數量]
備註:元素數量爲 32 位無符號整數,後面跟每一個元素的定義,與複合數組不一樣,它沒有額外的索引內容
十二、日期類型
類型編號:11
格式:[日期值][00 00]
備註:日期值爲1970-1-1 午夜開始的毫秒數,類型爲雙精度浮點數(BE 編碼)
1三、長字符串
類型編號:12
格式:[字符串長度][字符串內容]
備註:字符串長度爲 32 位整數,後跟對應長度的 UTF-8 字符串內容
1四、不支持的類型
類型編號:13
格式:官方未提供支持
1五、數據集類型
類型編號:14
格式:官方未提供支持
1六、XML
類型編號:15
格式:[內容長度][內容]
備註:內容長度爲 32 位整數,後跟對應長度的 UTF-8 格式內容
1七、特定類型對象
類型編號:16
格式:[類型名稱][對象類型-對象值]*
備註:
1八、AMF 3 對象
類型編號:17
格式:[AMF 3 數據類型定義]
備註:這個類型定義到對象類型定義結束,都是 AMF 3 格式。