Files
monibuca/plugin/mp4/pkg/box/mdia.go
2025-02-13 10:12:39 +08:00

74 lines
1.3 KiB
Go

package box
import (
"bytes"
"io"
)
type MdiaBox struct {
BaseBox
MDHD *MediaHeaderBox
MINF *MediaInformationBox
HDLR *HandlerBox
}
func (m *MdiaBox) WriteTo(w io.Writer) (n int64, err error) {
return WriteTo(w, m.MDHD, m.MINF, m.HDLR)
}
func (m *MdiaBox) Unmarshal(buf []byte) (b IBox, err error) {
r := bytes.NewReader(buf)
for {
b, err = ReadFrom(r)
if err != nil {
return m, err
}
switch box := b.(type) {
case *MediaHeaderBox:
m.MDHD = box
case *MediaInformationBox:
m.MINF = box
case *HandlerBox:
m.HDLR = box
}
}
}
type MediaInformationBox struct {
BaseBox
VMHD *VideoMediaHeaderBox
SMHD *SoundMediaHeaderBox
HMHD *HintMediaHeaderBox
STBL *SampleTableBox
DINF *DataInformationBox
}
func (m *MediaInformationBox) WriteTo(w io.Writer) (n int64, err error) {
return WriteTo(w, m.VMHD, m.SMHD, m.HMHD, m.STBL, m.DINF)
}
func (m *MediaInformationBox) Unmarshal(buf []byte) (b IBox, err error) {
r := bytes.NewReader(buf)
for err == nil {
b, err = ReadFrom(r)
switch box := b.(type) {
case *VideoMediaHeaderBox:
m.VMHD = box
case *SoundMediaHeaderBox:
m.SMHD = box
case *HintMediaHeaderBox:
m.HMHD = box
case *SampleTableBox:
m.STBL = box
case *DataInformationBox:
m.DINF = box
}
}
return m, err
}
func init() {
RegisterBox[*MdiaBox](TypeMDIA)
RegisterBox[*MediaInformationBox](TypeMINF)
}