RTMP中的AMF0格式说明

官方文档https://wwwimages2.adobe.com/content/dam/acom/en/devnet/pdf/amf0-file-format-specification.pdf
看懂这个文档需要先看懂一个规范https://tools.ietf.org/html/rfc2234

ABNF规范

如果了解正则表达式, 这里面的有些概念更容易理解

  1. 基本格式
;可以有N个element 
rule_name = element element element
  1. 字符串
; 下面的4个CRLF定义是完全相同的
CRLF =  %d13.10 ; 用点分隔
CRLF =  %x0D.0A
CRLF =  %d13 %d10
CRLF =  %x0D %x0A
; 下面的3个abc的定义也是一样的
abc  =  "abc"
abc  =  "a" "b" "c"
a = "a"
b = "b"
c = "c"
abc = a b c
  1. 可选元素
;接受a, b, c, d这4个规则中的其中一个, 相当于"或"
rule = a / b / c / d
AMF0规范中, 使用|代替了/
rule = a | b | c | d
  1. 追加可选元素
rule = a
rule =/ b
rule =/ c /d
;结果等同于
rule = a / b / c / d

可选元素使用场景举例:

DIGIT  =  "0" / "1" / "2" / "3" / "4" / "5" / "6" /  "7" / "8" / "9"
;它表示了数字字符的集合, 等同于
DIGIT       =  %x30-39
  1. 顺序组 有点类似于正则表达式的[], 对于程序员来说, 这个很容易理解
rule = elem (foo / bar) blat
等同于
rule = (elem foo blat) / (elem bar blat)
  1. 重复
rule = 1*10 DIGIT ; 1到10个数字
rule = 2 DIGIT ; 2个数字
rule = * DIGIT ; 任意个数字(0到无穷大)
rule = *1 DIGIT ; 0到1个数字
rule = [DIGIT] ; []表示可选, 等同于 *1 DIGIT

AMF0基本格式

AMF0的元素的第1个字节为marker, 表示这段内容的编码格式. 不同的marker,内容的编码格式不同

  1. 数字Number 双精度浮点数
    0x00 + 8字节的IEEE-754浮点数 IEEE754说明

  2. Boolean
    0x01 + 1字节(0,或1)

  3. String
    使用UTF-8编码
    0x02 + 2字节长度 + 字符串

  4. Object
    按照key-value的形式存储
    0x03 + (String + Value) + (String + Value) + ... + EMPTY String + 0x09

转载于:https://my.oschina.net/u/2343729/blog/1834538

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值