mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package box
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"io"
|
|
)
|
|
|
|
// aligned(8) class TrackExtendsBox extends FullBox('trex', 0, 0){
|
|
// unsigned int(32) track_ID;
|
|
// unsigned int(32) default_sample_description_index;
|
|
// unsigned int(32) default_sample_duration;
|
|
// unsigned int(32) default_sample_size;
|
|
// unsigned int(32) default_sample_flags
|
|
// }
|
|
|
|
type TrackExtendsBox struct {
|
|
FullBox
|
|
TrackID uint32
|
|
DefaultSampleDescriptionIndex uint32
|
|
DefaultSampleDuration uint32
|
|
DefaultSampleSize uint32
|
|
DefaultSampleFlags uint32
|
|
}
|
|
|
|
func CreateTrackExtendsBox(trackID uint32) *TrackExtendsBox {
|
|
return &TrackExtendsBox{
|
|
FullBox: FullBox{
|
|
BaseBox: BaseBox{
|
|
typ: TypeTREX,
|
|
size: uint32(FullBoxLen + 20),
|
|
},
|
|
},
|
|
TrackID: trackID,
|
|
}
|
|
}
|
|
|
|
func (box *TrackExtendsBox) WriteTo(w io.Writer) (n int64, err error) {
|
|
var tmp [20]byte
|
|
binary.BigEndian.PutUint32(tmp[0:], box.TrackID)
|
|
binary.BigEndian.PutUint32(tmp[4:], box.DefaultSampleDescriptionIndex)
|
|
binary.BigEndian.PutUint32(tmp[8:], box.DefaultSampleDuration)
|
|
binary.BigEndian.PutUint32(tmp[12:], box.DefaultSampleSize)
|
|
binary.BigEndian.PutUint32(tmp[16:], box.DefaultSampleFlags)
|
|
|
|
nn, err := w.Write(tmp[:])
|
|
n = int64(nn)
|
|
return
|
|
}
|
|
|
|
func (box *TrackExtendsBox) Unmarshal(buf []byte) (IBox, error) {
|
|
if len(buf) < 20 {
|
|
return nil, io.ErrShortBuffer
|
|
}
|
|
|
|
box.TrackID = binary.BigEndian.Uint32(buf[0:])
|
|
box.DefaultSampleDescriptionIndex = binary.BigEndian.Uint32(buf[4:])
|
|
box.DefaultSampleDuration = binary.BigEndian.Uint32(buf[8:])
|
|
box.DefaultSampleSize = binary.BigEndian.Uint32(buf[12:])
|
|
box.DefaultSampleFlags = binary.BigEndian.Uint32(buf[16:])
|
|
|
|
return box, nil
|
|
}
|
|
|
|
func init() {
|
|
RegisterBox[*TrackExtendsBox](TypeTREX)
|
|
}
|