mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
86 lines
1.7 KiB
Go
86 lines
1.7 KiB
Go
package box
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
)
|
|
|
|
// aligned(8) class MovieFragmentBox extends Box('moof'){
|
|
// }
|
|
|
|
type MovieFragmentBox struct {
|
|
BaseBox
|
|
MFHD *MovieFragmentHeaderBox
|
|
TRAFs []*TrackFragmentBox
|
|
}
|
|
|
|
type TrackFragmentBox struct {
|
|
BaseBox
|
|
TFHD *TrackFragmentHeaderBox
|
|
TFDT *TrackFragmentBaseMediaDecodeTimeBox
|
|
TRUN *TrackRunBox
|
|
}
|
|
|
|
func CreateTrackFragmentBox(tfhd *TrackFragmentHeaderBox, tfdt *TrackFragmentBaseMediaDecodeTimeBox, trun *TrackRunBox) *TrackFragmentBox {
|
|
return &TrackFragmentBox{
|
|
BaseBox: BaseBox{
|
|
typ: TypeTRAF,
|
|
size: uint32(BasicBoxLen + tfhd.size + trun.size + tfdt.size),
|
|
},
|
|
TFHD: tfhd,
|
|
TFDT: tfdt,
|
|
TRUN: trun,
|
|
}
|
|
}
|
|
|
|
func (box *MovieFragmentBox) WriteTo(w io.Writer) (n int64, err error) {
|
|
boxes := []IBox{box.MFHD}
|
|
for _, traf := range box.TRAFs {
|
|
boxes = append(boxes, traf)
|
|
}
|
|
return WriteTo(w, boxes...)
|
|
}
|
|
|
|
func (box *TrackFragmentBox) WriteTo(w io.Writer) (n int64, err error) {
|
|
return WriteTo(w, box.TFHD, box.TFDT, box.TRUN)
|
|
}
|
|
|
|
func (box *MovieFragmentBox) Unmarshal(buf []byte) (IBox, error) {
|
|
r := bytes.NewReader(buf)
|
|
for {
|
|
b, err := ReadFrom(r)
|
|
if err != nil {
|
|
break
|
|
}
|
|
switch b := b.(type) {
|
|
case *MovieFragmentHeaderBox:
|
|
box.MFHD = b
|
|
case *TrackFragmentBox:
|
|
box.TRAFs = append(box.TRAFs, b)
|
|
}
|
|
}
|
|
return box, nil
|
|
}
|
|
|
|
func (box *TrackFragmentBox) Unmarshal(buf []byte) (IBox, error) {
|
|
r := bytes.NewReader(buf)
|
|
for {
|
|
b, err := ReadFrom(r)
|
|
if err != nil {
|
|
break
|
|
}
|
|
switch b := b.(type) {
|
|
case *TrackFragmentHeaderBox:
|
|
box.TFHD = b
|
|
case *TrackRunBox:
|
|
box.TRUN = b
|
|
}
|
|
}
|
|
return box, nil
|
|
}
|
|
|
|
func init() {
|
|
RegisterBox[*MovieFragmentBox](TypeMOOF)
|
|
RegisterBox[*TrackFragmentBox](TypeTRAF)
|
|
}
|