diff --git a/pkg/flv/amf/amf.go b/pkg/flv/amf/amf.go index 8cbdff2e..8878d29a 100644 --- a/pkg/flv/amf/amf.go +++ b/pkg/flv/amf/amf.go @@ -60,6 +60,9 @@ func (a *AMF) ReadItem() (any, error) { case TypeObject: return a.ReadObject() + case TypeEcmaArray: + return a.ReadEcmaArray() + case TypeNull: return nil, nil @@ -174,7 +177,18 @@ func (a *AMF) WriteString(s string) { func (a *AMF) WriteObject(obj map[string]any) { a.buf = append(a.buf, TypeObject) + a.writeKV(obj) + a.buf = append(a.buf, 0, 0, TypeObjectEnd) +} +func (a *AMF) WriteEcmaArray(obj map[string]any) { + n := len(obj) + a.buf = append(a.buf, TypeEcmaArray, byte(n>>24), byte(n>>16), byte(n>>8), byte(n)) + a.writeKV(obj) + a.buf = append(a.buf, 0, 0, TypeObjectEnd) +} + +func (a *AMF) writeKV(obj map[string]any) { for k, v := range obj { n := len(k) a.buf = append(a.buf, byte(n>>8), byte(n)) @@ -185,14 +199,16 @@ func (a *AMF) WriteObject(obj map[string]any) { a.WriteString(v) case int: a.WriteNumber(float64(v)) + case uint32: + a.WriteNumber(float64(v)) + case float64: + a.WriteNumber(v) case bool: a.WriteBool(v) default: panic(v) } } - - a.buf = append(a.buf, 0, 0, TypeObjectEnd) } func (a *AMF) WriteNull() {