AMF数据类型详解

AMF数据类型详解

一、AMF格式定义

类型说明(ObjType)

 具体值

 ObjValueSize

CORE_NUMBER

0x00

 8字节

CORE_BOOLEAN

0x01

 1字节

CORE_String 

0x02

2字节 (2字节的数据纪录了String的实际长度)

CORE_Object 

0x03

 0字节(开始嵌套0x000009表示嵌套结束)

NULL  

0x05

0字节 空字节无意义

CORE_Map

0x08

 4字节(开始嵌套)

二、具体定义及其举例

1、number类型

类型0x00(1byte)+值(8bytes)

例如:00 3f f0 00 00 00 00 00 00

number类型:0x00

number值:3f f0 00 00 00 00 00 00 (为小端存储)

在解number的值的时候要先正过来才求值,注意:这个值是double类型的。

C#方式求解:

byte[] data = new byte[]{0x3f, 0xf0, 0x00, 0x00 , 0x00 , 0x00 , 0x00 , 0x00};

double value = BitConverter.ToDouble(data.Reverse().ToArray(), 0);

2、bool类型

类型0x01(1byte)+值(1byte)

例如:01 01

类型:0x01

值 :0x01(true),0x00(false)

3、string类型

类型0x02(1byte)+长度(2bytes)+值(前面指定长度的bytes)

例如:02 00 07 63 6f 6e 6e 65 63 74

类型:0x02

长度:0x00 0x07(大端存储)

值 :0x63 ,0x6f ,0x6e ,0x6e ,0x65 ,0x63 ,0x74 (大端存储)

C#方式求解:

byte[] data = new byte[]{0x63 ,0x6f ,0x6e ,0x6e ,0x65 ,0x63 ,0x74};

string value = Encoding.UTF8.GetString(data)

4、null类型

类型0x05(1byte)

例如:05

类型:0x05

null类型很特殊就一个字节0x05

5、object类型

例如:

 

object类型有三部分组成,

类型0x03(1byte)

第一部分是Property:Property结构(默认string类型省略0x02):长度(2bytes)+值(前面指定长度bytes)

第二部分是value:value结构:可以是以上说明的任意类型。

第三部分是结尾:00 00 09

例如:00 03 61 70 70 02 00 09 6c 69 76 65 2f 31 32 33 34

Property长度:00 03

Property值: 61 70 70 “app”

value类型: 02

value长度: 00 09

value值: 6c 69 76 65 2f 31 32 33 34 “live/1234”

6、map类型

该类型是出现在object下的一个参数data中, 格式如下不再赘述了

 

7、注意Rtmp数据中的坑

在Wireshark抓包中会出现一个特殊的字节C3

这个是AMF0消息中的Connect,但是在TCP payload中会多出一个C3(这个字节是是客户端发送Connect命令的时候会多出的一个字节)

但是在Wireshark解析中会自动过滤掉这个字节,如下图: 

 

建议:在解析rtmp数据的时候不要一味地看Wireshark解析,要学会从TCP payload的实际数据中解析数据。

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值