Add support B-frames for MP4 consumer
This commit is contained in:
+21
-9
@@ -276,7 +276,7 @@ const (
|
||||
TrunSampleCTS = 0x0000800
|
||||
)
|
||||
|
||||
func (m *Movie) WriteMovieFragment(seq, tid, duration, size, flags uint32, time uint64) {
|
||||
func (m *Movie) WriteMovieFragment(seq, tid, duration, size, flags uint32, dts uint64, cts uint32) {
|
||||
m.StartAtom(Moof)
|
||||
|
||||
m.StartAtom(MoofMfhd)
|
||||
@@ -302,17 +302,29 @@ func (m *Movie) WriteMovieFragment(seq, tid, duration, size, flags uint32, time
|
||||
m.EndAtom()
|
||||
|
||||
m.StartAtom(MoofTrafTfdt)
|
||||
m.WriteBytes(1) // version
|
||||
m.Skip(3) // flags
|
||||
m.WriteUint64(time) // base media decode time
|
||||
m.WriteBytes(1) // version
|
||||
m.Skip(3) // flags
|
||||
m.WriteUint64(dts) // base media decode time
|
||||
m.EndAtom()
|
||||
|
||||
m.StartAtom(MoofTrafTrun)
|
||||
m.Skip(1) // version
|
||||
m.WriteUint24(TrunDataOffset) // flags
|
||||
m.WriteUint32(1) // sample count
|
||||
// data offset: current pos + uint32 len + MDAT header len
|
||||
m.WriteUint32(uint32(len(m.b)) + 4 + 8)
|
||||
m.Skip(1) // version
|
||||
|
||||
if cts == 0 {
|
||||
m.WriteUint24(TrunDataOffset) // flags
|
||||
m.WriteUint32(1) // sample count
|
||||
|
||||
// data offset: current pos + uint32 len + MDAT header len
|
||||
m.WriteUint32(uint32(len(m.b)) + 4 + 8)
|
||||
} else {
|
||||
m.WriteUint24(TrunDataOffset | TrunSampleCTS)
|
||||
m.WriteUint32(1)
|
||||
|
||||
// data offset: current pos + uint32 len + CTS + MDAT header len
|
||||
m.WriteUint32(uint32(len(m.b)) + 4 + 4 + 8)
|
||||
m.WriteUint32(cts)
|
||||
}
|
||||
|
||||
m.EndAtom() // TRUN
|
||||
|
||||
m.EndAtom() // TRAF
|
||||
|
||||
Reference in New Issue
Block a user