Set mdhd.Duration to 0 for fragmented MP4

Uncomment and explicitly set mdhd.Duration = 0 in machinery/src/video/mp4.go for relevant tracks (video H264/H265 and audio track). This ensures mdhd.Duration is zero for fragmented MP4 so players derive duration from fragments (avoiding QuickTime adding fragment durations and doubling the reported duration).
This commit is contained in:
cedricve
2026-02-13 21:46:32 +01:00
parent 6f559c2f00
commit 9d83cab5cc

View File

@@ -503,7 +503,7 @@ func (mp4 *MP4) Close(config *models.Config) {
// mdhd.Duration MUST be 0 for fragmented MP4. QuickTime adds mdhd.Duration
// to the fragment durations (mehd/sidx), so setting it non-zero doubles the
// reported duration. Leave it at 0 so the player derives duration from fragments.
//init.Moov.Traks[0].Mdia.Mdhd.Duration = 0 // default, left as-is
init.Moov.Traks[0].Mdia.Mdhd.Duration = 0
init.Moov.Traks[0].Mdia.Mdhd.CreationTime = macTime
init.Moov.Traks[0].Mdia.Mdhd.ModificationTime = macTime
case "H265", "HVC1":
@@ -519,7 +519,7 @@ func (mp4 *MP4) Close(config *models.Config) {
init.Moov.Traks[0].Tkhd.ModificationTime = macTime
init.Moov.Traks[0].Mdia.Hdlr.Name = "agent " + utils.VERSION
// mdhd.Duration MUST be 0 for fragmented MP4 (see H264 case above).
//init.Moov.Traks[0].Mdia.Mdhd.Duration = 0 // default, left as-is
init.Moov.Traks[0].Mdia.Mdhd.Duration = 0
init.Moov.Traks[0].Mdia.Mdhd.CreationTime = macTime
init.Moov.Traks[0].Mdia.Mdhd.ModificationTime = macTime
}
@@ -543,7 +543,7 @@ func (mp4 *MP4) Close(config *models.Config) {
init.Moov.Traks[1].Tkhd.ModificationTime = macTime
init.Moov.Traks[1].Mdia.Hdlr.Name = "agent " + utils.VERSION
// mdhd.Duration MUST be 0 for fragmented MP4 (see video track comment).
//init.Moov.Traks[1].Mdia.Mdhd.Duration = 0 // default, left as-is
init.Moov.Traks[1].Mdia.Mdhd.Duration = 0
init.Moov.Traks[1].Mdia.Mdhd.CreationTime = macTime
init.Moov.Traks[1].Mdia.Mdhd.ModificationTime = macTime
}