[FFmpeg-user] Is there any approach to tell ffmpeg how to determine dts of fMP4 segment?

toya3329 toya3329 at protonmail.com
Thu Mar 1 09:06:58 EET 2018

Hi, Carl!

I have use under development streamlink mpegdash branch
(https://github.com/beardypig/streamlink/tree/mpegdash) to watch some
Youtube dash live stream[1] (with some custom hardcoded modification for YT
livestream). And mpegdash streamlink uses ffmpeg to mux video and audio

Uploaded fMP4 sample at https://ufile.io/swsr8.

In mov_read_trun(), the following snippet which give the first dts/pts

 frag_stream_info = get_current_frag_stream_info(&c->frag_index);
    if (frag_stream_info)
        if (frag_stream_info->first_tfra_pts != AV_NOPTS_VALUE &&
            c->use_mfra_for == FF_MOV_FLAG_MFRA_PTS) {
            pts = frag_stream_info->first_tfra_pts;
            av_log(c->fc, AV_LOG_DEBUG, "found mfra time %"PRId64
                    ", using it for pts\n", pts);
        } else if (frag_stream_info->sidx_pts != AV_NOPTS_VALUE) {
            // FIXME: sidx earliest_presentation_time is *PTS*, s.b.
            // pts = frag_stream_info->sidx_pts;
            dts = frag_stream_info->sidx_pts - sc->time_offset;
            av_log(c->fc, AV_LOG_DEBUG, "found sidx time %"PRId64

In this failed case, sidx_pts is 0 and it will set the first dts to sidx_pts
And then start dts of every fMP4 segment is 0. After ffmpeg muxing, ffmpeg
log show "Non-monotonous DTS in output stream". But tfdt time of each
segment is good to be used as a ref timestampe. 



[1]Some fMP4 segment file produced by VideoHandler.(handler_name is
VideoHandler) always give six earliest presentation 0. (Some file produced
by "ISO Media file produced by Google Inc" has the correct

Sent from: http://www.ffmpeg-archive.org/

More information about the ffmpeg-user mailing list