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

相關文章
相關標籤/搜索