mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
74 lines
1.3 KiB
Go
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)
|
|
}
|