amf0 amf3 的区别

最近在用纯java写一个flv的播放器,涉及到flv的解析,我需要解读flv scripttag里面的数据,正常的width,height,duration,这些都可以用一些工具看到,比如flvparse。除此之外,为了实现seek,我还需要解读这里面的关键帧列表,但是这个我就找不到工具了,也不知道解读方法。后来了解到,这是amf格式的数据,于是我从GitHub上找了一个amf解析器的demo。最终用amf0格式成功解读出了关键帧列表。


然后我发现了一个问题,amf格式好像有两个,amf0和amf3,我找的代码只支持amf0,那么我应不应该支持amf3呢,amf0和amf3的区别又是什么呢。


后来经过查料


NOTE: With the introduction of AMF 3 in Flash Player 9, a special type marker was added to AMF 0 to signal a switch to AMF 3 serialization. This allows NetConnection requests to start out in AMF 0 and switch to AMF 3 on the first complex type to take advantage of the more the efficient encoding of AMF 3.


这个意思是说现在主要还是在用amf0,网络传输中,amf3是加在amf0流中的一种格式,原来amf0用0x00表示double,用0x01表示bool型,amf3出现后,amf0中的0x11就表示接下来会有一个amf3格式的数据块。


完整的对照表如下:

AMF0:

#define AMF_NUMBER              0x00    // 浮点数
#define AMF_BOOLEAN             0x01    // 布尔型
#define AMF_STRING              0x02    // 字符串
#define AMF_BEGIN_OBJECT        0x03    // 对象,开始
#define AMF_NULL                0x05    // null
#define AMF_UNDEFINED           0x06
#define AMF_REFERENCE           0x07
#define AMF_MIXED_ARRAY         0x08
#define AMF_END_OBJECT          0x09    // 对象,结束
#define AMF_BEGIN_TYPED_OBJECT  0x10
#define AMF_STRICT_ARRAY        0x0A
#define AMF_DATE                0x0B    // 日期
#define AMF_LONG_STRING         0x0C    // 字符串
#define AMF_UNSUPPORTED         0x0D

#define AMF_AVMPLUS_OBJECT  0x11  //AMF3
#define AMF_END             0xFF


AMF3:

#define AMF3_UNDEFINED      0x00
#define AMF3_NULL           0x01
#define AMF3_FALSE          0x02
#define AMF3_TRUE           0x03
#define AMF3_INTEGER        0x04
#define AMF3_NUMBER         0x05
#define AMF3_STRING         0x06
#define AMF3_DATE           0x08
#define AMF3_ARRAY          0x09
#define AMF3_OBJECT         0x0A
#define AMF3_BYTEARRAY      0x0C
#define AMF3_DICTIONARY     0x11



所以假如我解析的flv中没有amf3,我大可以继续用amf0去解析。















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值