Quoting Martin Storsjö (2015-03-10 10:16:47)
> When automatically flushing fragments based on set conditions
> (fragmentation on keyframes, after some interval or byte size),
> we already have the next packet for one stream - use this for setting
> the duration of the last packet in the flushed fragment correctly.
> 
> This avoids having to adjust the timestamp of the first packet in
> the new fragment since the last duration was unknown.
> 
> Unfortunately, this only works for automatic flushing (not for
> caller-triggered flushing, like in the dash muxer), and only for the
> one single track that triggered the flushing. The duration of the
> last sample in all other tracks still is dependent on AVPacket
> duration (or heuristics).
> ---
>  libavformat/movenc.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index c70d6fd..6e18591 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -3512,8 +3512,14 @@ static int mov_write_packet(AVFormatContext *s, 
> AVPacket *pkt)
>               (mov->flags & FF_MOV_FLAG_FRAG_KEYFRAME &&
>                enc->codec_type == AVMEDIA_TYPE_VIDEO &&
>                trk->entry && pkt->flags & AV_PKT_FLAG_KEY)) {
> -            if (frag_duration >= mov->min_fragment_duration)
> +            if (frag_duration >= mov->min_fragment_duration) {
> +                // Set the duration of this track to line up with the next
> +                // sample in this track. This avoids relying on AVPacket
> +                // duration, but only helps for this particular track, not
> +                // for the other ones that are flushed at the same time.
> +                trk->track_duration = pkt->dts - trk->start_dts;
>                  mov_auto_flush_fragment(s);
> +            }
>          }
>  
>          return ff_mov_write_packet(s, pkt);
> -- 
> 1.9.5 (Apple Git-50.3)

Looks sane.

-- 
Anton Khirnov
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to