https://github.com/gnolizuh/gamf
gamf implements encoding and decoding of AMF based on Go.
https://github.com/gnolizuh/gamf
adobe amf amf0 amf3 golang
Last synced: 6 months ago
JSON representation
gamf implements encoding and decoding of AMF based on Go.
- Host: GitHub
- URL: https://github.com/gnolizuh/gamf
- Owner: gnolizuh
- License: apache-2.0
- Created: 2024-01-25T06:51:25.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-21T08:18:41.000Z (over 2 years ago)
- Last Synced: 2024-06-21T14:48:19.851Z (about 2 years ago)
- Topics: adobe, amf, amf0, amf3, golang
- Language: Go
- Homepage:
- Size: 110 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
English | [中文](README.zh_CN.md)
# gamf
Best open source lib of **AMF** serialization and deserialization based on Go.
# Features
- Usage exactly similar to std.json
- Flexible customization with options
- More compatible, we supported both AMF0 & AMF3
# Installation
```
go get github.com/gnolizuh/gamf
```
# How to use
## Integer
### AMF0
```
in := 1
bs, _ := Marshal(&in)
var out int
Unmarshal(bs, &out)
```
### AMF3
```
var bs []byte
buf := bytes.NewBuffer(bs)
in := 1
NewEncoder().WithWriter(buf).Encode(&in)
var out int
NewDecoder().WithReader(buf).Decode(&out)
```
## Float
### AMF0
```
in := 1.0
bs, _ := Marshal(&in)
var out float64
Unmarshal(bs, &out)
```
### AMF3
```
var bs []byte
buf := bytes.NewBuffer(bs)
in := 1
NewEncoder().WithWriter(buf).WithVersion(Version3).Encode(&in)
var out int
NewDecoder().WithReader(buf).WithVersion(Version3).Decode(&out)
```
## String
### AMF0
```
in := "1"
bs, _ := Marshal(&in)
var out string
Unmarshal(bs, &out)
```
### AMF3
```
var bs []byte
buf := bytes.NewBuffer(bs)
in := "1"
NewEncoder().WithWriter(buf).WithVersion(Version3).Encode(&in)
var out string
NewDecoder().WithReader(buf).WithVersion(Version3).Decode(&out)
```
## Bool
### AMF0
```
in := "1"
bs, _ := Marshal(&in)
var out string
Unmarshal(bs, &out)
```
### AMF3
```
var bs []byte
buf := bytes.NewBuffer(bs)
in := true
NewEncoder().WithWriter(buf).WithVersion(Version3).Encode(&in)
out := false
NewDecoder().WithReader(buf).WithVersion(Version3).Decode(&out)
```
## Slice
### AMF0
```
in := []int{1, 2, 3}
bs, _ := Marshal(&in)
var out []int
Unmarshal(bs, &out)
```
### AMF3
```
var bs []byte
buf := bytes.NewBuffer(bs)
in := []any{1.0, "1", true, map[string]any{"Int": 1.0, "String": "1", "Bool": true}}
NewEncoder().WithWriter(buf).WithVersion(Version3).Encode(&in)
out := []any{0.0, "0", false, map[string]any{}}
NewDecoder().WithReader(buf).WithVersion(Version3).Decode(&out)
```
## Struct
### Struct to Struct
```
type Struct struct {
Int int `amf:"tag_int"`
String string `amf:"tag_string"`
Bool bool `amf:"tag_bool"`
Object struct {
Int int `amf:"tag_int"`
String string `amf:"tag_string"`
Bool bool `amf:"tag_bool"`
} `amf:"tag_object"`
}
in := Struct{} // with value be initialized
bs, _ := Marshal(&in)
out := Struct{}
Unmarshal(bs, &out)
```
### Struct to Map
```
type Struct struct {
Int int `amf:"tag_int"`
String string `amf:"tag_string"`
Bool bool `amf:"tag_bool"`
Object struct {
Int int `amf:"tag_int"`
String string `amf:"tag_string"`
Bool bool `amf:"tag_bool"`
} `amf:"tag_object"`
}
in := Struct{} // with value be initialized
bs, _ := Marshal(&in)
out := make(map[string]any)
Unmarshal(bs, &out)
```
## Map
```
in := map[string]any{"Int": 1.0, "String": "1", "Bool": true}
bs, _ := Marshal(&in)
out := make(map[string]any)
Unmarshal(bs, &out)
```
# Reference
- https://rtmp.veriskope.com/pdf/amf0-file-format-specification.pdf
- https://rtmp.veriskope.com/pdf/amf3-file-format-spec.pdf