【音视频技术】AMF实用协议解析说明

AMF是Adobe设计的一种通用数据封装格式。

AMF第一个byte为此数据的类型:


第2~3bytes表示数值的长度 该变量是一个u16类型的值:


上图中02表示AMF类型是string类型 00 0A表示这个字符串是10个字节,6F 6E 4D 65 74 61 44 61 74 61 转换成字符串就是

“onMetaData”,随后的08又是一个新的AMF包了08类型是MixedArray。

MixedArray这个类型比较复杂:

第1个    字节是 0x08 这个是AMF的类型

第2-5个字节是一个u32类型,该数值是该AMF包中有一个元素,比如 weight 和height 就是两个元素 也就是这个元素是一种

key和value的对应关系 《key:weight 对应着 value:1080》所以紧接着的就是对key的字符串描述、

第1-2个字节表示 一个key string的长度 比如 “weight”长度是6  此处就可以记录为 0x0006

紧接着的就是weight的值

再后面的一个字节表示这个 key 对应的值的类型比如00 代表 number 这个类型是和最上面那个个AMF包类型是一样的(这个字节我看了好久,网上看的博客都说是后三个字节而不是后一个,我就不明白哪来的三个,好坑!)

因为类型值到了所以数据长度和类型是相关也就是固定的,所以直接解出来就行了!

需要说的是解数据时要注意大端存储和double类型,AMF中定制的number都是double类型的。


其他类型的AMF就不多说了,我没接触过也没研究过,网上有很多相关的资料,之所以写这个是因为,我发现好多文章里面

都说MixedArray类型中 元素类型 是元素名的 之后的3个bytes,我看了好久怎么都兑不上,后来发现就是以后的1个字节,也不知道那些说3个字节的人是怎么算的,如果有知道的朋友一定要留言告诉我 谢啦!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值