Add support B-frames for MP4 consumer

This commit is contained in:
Alexey Khit
2023-08-22 15:55:20 +03:00
parent 90f2a9e106
commit 8cd977f7ad
7 changed files with 77 additions and 35 deletions
+21 -9
View File
@@ -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