RTMP中的AMF0格式说明

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

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说明.net

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

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

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

相关文章
相关标签/搜索