in the form of a string of value "_result" and two serialized objects as arguments. The message can be decoded as follows: (command) "_result" (transaction id) 1 (value) [1] { fmsVer: "FMS/3,5,5,2004" capabilities: 31.0 mode: 1.0 }, [2] { level: "status", code: "NetConnection.Connect.Success", description: "Connection succeeded.", data: (array) { version: "3,5,5,2004" }, clientId: 1584259571.0, objectEncoding: 3.0 } Here one can see an array (in turquoise) as a value of the 'data' key which has one member. We can see the objectEncoding value to be 3. This means that subsequent messages are going to be sent with the 0x11 message type, which will imply an AMF3 encoding. AMF3 The latest version of the protocol specifies significant changes that allow for a more compressed format. The data markers are as follows: Undefined - 0x00 Null - 0x01 Boolean False - 0x02 Boolean True - 0x03 Integer - 0x04 (expandable 8+ bit integer) Double - 0x05 (Encoded as IEEE 64-bit double-precision floating point number) String - 0x06 (expandable 8+ bit integer string length with a UTF-8 string) XMLDocument - 0x07 (expandable 8+ bit integer string length and/or flags with a UTF-8 string) Date - 0x08 (expandable 8+ bit integer flags with an IEEE 64-bit double-precision floating point UTC offset time) Array - 0x09 (expandable 8+ bit integer entry count and/or flags with optional expandable 8+ bit integer name lengths with a UTF-8 names) Object - 0x0A (expandable 8+ bit integer entry count and/or flags with optional expandable 8+ bit integer name lengths with a UTF-8 names) XML - 0x0B (expandable 8+ bit integer flags) ByteArray - 0x0C (expandable 8+ bit integer flags with optional 8 bit byte length) The first 4 types are not followed by any data (Booleans have two types in AMF3). Additional markers used by Flash Player 10 (the format is still referred to as AMF3) are as follows: VectorInt - 0x0D VectorUInt - 0x0E VectorDouble - 0x0F VectorObject - 0x10 Dictionary - 0x11 AMF3 aims for more compression and one of the ways it achieves this is by avoiding string duplication by saving them into an array against which all new string are checked. The byte following the string marker is no longer denoting pure length but it is a complex byte where the least significant bit indicated whether the string is 'inline' (1) i.e. not in the array or 'reference' (0) in which case the index of the