1
1
mirror of https://github.com/wader/fq.git synced 2024-11-24 11:16:09 +03:00
fq/format/mp4/pssh_playready.go

48 lines
1.1 KiB
Go
Raw Normal View History

2021-09-02 14:08:26 +03:00
package mp4
import (
"github.com/wader/fq/format"
"github.com/wader/fq/pkg/decode"
"github.com/wader/fq/pkg/interp"
"github.com/wader/fq/pkg/scalar"
2021-09-02 14:08:26 +03:00
)
func init() {
interp.RegisterFormat(decode.Format{
2021-09-02 14:08:26 +03:00
Name: format.PSSH_PLAYREADY,
Description: "PlayReady PSSH",
DecodeFn: playreadyPsshDecode,
})
}
const (
recordTypeRightsManagementHeader = 1
recordTypeLicenseStore = 2
)
var recordTypeNames = scalar.UToSymStr{
2021-09-02 14:08:26 +03:00
recordTypeRightsManagementHeader: "Rights management header",
recordTypeLicenseStore: "License store",
}
func playreadyPsshDecode(d *decode.D, _ any) any {
2021-09-02 14:08:26 +03:00
d.Endian = decode.LittleEndian
d.FieldU32("size")
count := d.FieldU16("count")
i := uint64(0)
d.FieldStructArrayLoop("records", "record", func() bool { return i < count }, func(d *decode.D) {
recordType := d.FieldU16("type", recordTypeNames)
2021-09-02 14:08:26 +03:00
recordLen := d.FieldU16("len")
switch recordType {
case recordTypeRightsManagementHeader, recordTypeLicenseStore:
d.FieldUTF16LE("xml", int(recordLen))
default:
d.FieldRawLen("data", int64(recordLen)*8)
2021-09-02 14:08:26 +03:00
}
i++
})
return nil
}