RTMP协议中的AMF数据类型说明

这里有一个连接,amf0和amf3的库,我下了看了下,还是自己写吧,哎。http://wooce.iteye.com/blog/1396278 参考crtmpserver的代码写的,其中有amf.h文件。

  
AMF数据第一个byte为此数据的类型,类型有:
Number0×00double类型
Boolean0×01bool类型
String0×02string类型
Object0×03object类型
MovieClip0×04Not available in Remoting
Null0×05null类型,空
Undefined0×06 
Reference0×07 
MixedArray0×08 
EndOfObject0×09See Object ,表示object结束
Array0x0a 
Date0x0b 
LongString0x0c 
Unsupported0x0d 
Recordset0x0eRemoting, server-to-client only
XML0x0f 
TypedObject (Class instance)0×10 
AMF3 data0×11

Sent by Flash player 9+

对应的枚举就是:

      public enum DataType{
      Number = 00,// 0
      Boolean = 01,// 1
      String = 02,// 2
      UntypedObject = 03,// 3
      MovieClip = 04,// 4
      Null = 05,// 5
      Undefined = 06,// 6
      ReferencedObject = 07,// 7
      MixedArray = 08,// 8
      End = 09,// 9
      Array = 10,// 10
      Date = 11,// 11
      LongString = 12,// 12
      TypeAsObject = 13,// 13
      Recordset = 14,// 14
      Xml = 15,// 15
      TypedObject = 16,// 16
      AMF3data = 17// 17
}

rtmp协议中数据都是大端的,所以在放数据前都要将数据转成大端的形式。

1、number类型其实就是double,占8bytes。比如:00 00 00 00 00 00 00 00,第一个byte为amf类型,其后8bytes为double值0.0。

 
 2、boolean就是布尔类型,占用1byte。比如:01 00,第一个byte为amf类型,其后1byte是值,false。
  
3、string就是字符类型,一个byte的amf类型,两个bytes的字符长度,和N个bytes的数据。比如:02 00 02 33 22,第一个byte为amf类型,其后两个bytes为长度,注意这里的00 02是大端模式,33 22是字符数据。

 
 4、null是空,只有一个byte,0x05。
 
 5、object类型要复杂点,第一个byte是03表示object,其后跟的是N个(key+value)。最后以00 00 09表示object结束。

5.1、key是一个字符串组成:2bytes的长度,N bytes的数据,就是表示value的作用,相当于value的名字。
5.2、value可以使amf任意一种类型,包括object。格式和单独的amf type一样,如果是object的话,相当于在里面再嵌套一个object。

5.3、level(key)后面的status就是value,此value是string类型,所以格式是上面提到的string类型(0x02)。
 
 6、ECMA_ARRAY(0x08)实际上和object差不多,只是在0x08类型后面多了4个bytes的记录总共多少items的东西,目测全部填00也可以,也是以00 00 09结束。
  
0x11类型是amf3的类型,amf3实际上外层是封了一层amf0,为了与amf0兼容,我没有用,没有研究过。
 
参考资料:
1、 RTMP协议中的AMF数据

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值