mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-09-27 04:36:12 +08:00
95 lines
2.1 KiB
Go
95 lines
2.1 KiB
Go
package mp4
|
|
|
|
import (
|
|
"encoding/binary"
|
|
"github.com/deepch/vdk/format/mp4/mp4io"
|
|
"time"
|
|
)
|
|
|
|
var matrix = [9]int32{0x10000, 0, 0, 0, 0x10000, 0, 0, 0, 0x40000000}
|
|
var time0 = time.Date(1904, time.January, 1, 0, 0, 0, 0, time.UTC)
|
|
|
|
func FTYP() []byte {
|
|
b := make([]byte, 0x18)
|
|
binary.BigEndian.PutUint32(b, 0x18)
|
|
copy(b[0x04:], "ftyp")
|
|
copy(b[0x08:], "iso5")
|
|
copy(b[0x10:], "iso5")
|
|
copy(b[0x14:], "avc1")
|
|
return b
|
|
}
|
|
|
|
func MOOV() *mp4io.Movie {
|
|
return &mp4io.Movie{
|
|
Header: &mp4io.MovieHeader{
|
|
PreferredRate: 1,
|
|
PreferredVolume: 1,
|
|
Matrix: matrix,
|
|
NextTrackId: -1,
|
|
Duration: 0,
|
|
TimeScale: 1000,
|
|
CreateTime: time0,
|
|
ModifyTime: time0,
|
|
PreviewTime: time0,
|
|
PreviewDuration: time0,
|
|
PosterTime: time0,
|
|
SelectionTime: time0,
|
|
SelectionDuration: time0,
|
|
CurrentTime: time0,
|
|
},
|
|
MovieExtend: &mp4io.MovieExtend{
|
|
Tracks: []*mp4io.TrackExtend{
|
|
{
|
|
TrackId: 1,
|
|
DefaultSampleDescIdx: 1,
|
|
DefaultSampleDuration: 40,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|
|
|
|
func TRAK() *mp4io.Track {
|
|
return &mp4io.Track{
|
|
// trak > tkhd
|
|
Header: &mp4io.TrackHeader{
|
|
TrackId: int32(1), // change me
|
|
Flags: 0x0007, // 7 ENABLED IN-MOVIE IN-PREVIEW
|
|
Duration: 0, // OK
|
|
Matrix: matrix,
|
|
CreateTime: time0,
|
|
ModifyTime: time0,
|
|
},
|
|
// trak > mdia
|
|
Media: &mp4io.Media{
|
|
// trak > mdia > mdhd
|
|
Header: &mp4io.MediaHeader{
|
|
TimeScale: 1000,
|
|
Duration: 0,
|
|
Language: 0x55C4,
|
|
CreateTime: time0,
|
|
ModifyTime: time0,
|
|
},
|
|
// trak > mdia > minf
|
|
Info: &mp4io.MediaInfo{
|
|
// trak > mdia > minf > dinf
|
|
Data: &mp4io.DataInfo{
|
|
Refer: &mp4io.DataRefer{
|
|
Url: &mp4io.DataReferUrl{
|
|
Flags: 0x000001, // self reference
|
|
},
|
|
},
|
|
},
|
|
// trak > mdia > minf > stbl
|
|
Sample: &mp4io.SampleTable{
|
|
SampleDesc: &mp4io.SampleDesc{},
|
|
TimeToSample: &mp4io.TimeToSample{},
|
|
SampleToChunk: &mp4io.SampleToChunk{},
|
|
SampleSize: &mp4io.SampleSize{},
|
|
ChunkOffset: &mp4io.ChunkOffset{},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
}
|