From 1de4da92e876b17f3251e3334ad7abe22f1fd98a Mon Sep 17 00:00:00 2001 From: cp90 <153345481+cp90-pixel@users.noreply.github.com> Date: Sat, 6 Sep 2025 09:50:40 -0400 Subject: [PATCH] Use fragment base time when muxing MP4 --- .../schabi/newpipe/streams/Mp4FromDashWriter.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java index 807f190b4ad..8514177d42d 100644 --- a/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java +++ b/app/src/main/java/org/schabi/newpipe/streams/Mp4FromDashWriter.java @@ -185,8 +185,12 @@ public void build(final SharpStream output) throws IOException { Mp4DashChunk chunk; while ((chunk = readers[i].getNextChunk(true)) != null) { - if (defaultMediaTime[i] < 1 && chunk.moof.traf.tfhd.defaultSampleDuration > 0) { - defaultMediaTime[i] = chunk.moof.traf.tfhd.defaultSampleDuration; + if (defaultMediaTime[i] < 1) { + if (chunk.moof.traf.tfdt > 0) { + defaultMediaTime[i] = (int) chunk.moof.traf.tfdt; + } else if (chunk.moof.traf.tfhd.defaultSampleDuration > 0) { + defaultMediaTime[i] = chunk.moof.traf.tfhd.defaultSampleDuration; + } } read += chunk.moof.traf.trun.chunkSize; @@ -763,8 +767,8 @@ private void makeTrak(final int index, final long duration, final int defaultMed final int mediaTime; if (tracks[index].trak.edstElst == null) { - // is a audio track ¿is edst/elst optional for audio tracks? - mediaTime = 0x00; // ffmpeg set this value as zero, instead of defaultMediaTime + // there is no edit list, use the first decode timestamp as start time + mediaTime = defaultMediaTime; bMediaRate = 0x00010000; } else { mediaTime = (int) tracks[index].trak.edstElst.mediaTime;