[FFmpeg-devel] [PATCH] avformat/hlsenc: check the segment duration valid

Steven Liu lingjiujianke at gmail.com
Mon Aug 17 06:02:46 EEST 2020


zhilizhao <quinkblack at foxmail.com> 于2020年8月17日周一 上午10:54写道:
>
> Hi Steven,
>
> > On Aug 17, 2020, at 8:49 AM, Steven Liu <lq at chinaffmpeg.org> wrote:
> >
> > output a warning message if the target duration of the segment.
>
> The sentence is incomplete.
Ah ,yes, should
"Output a warning message if the target duration of the segment is negative."
>
> > and modify the target duration to one packet duration,
> > because there maybe have bframe and then split not by keyframe,
> > and the segment is very very small.
>
> The warning message is very helpful, modify the target duration is less helpful
> IMHO. The generated files are broken and cannot be fixed. Let the user see what’s
> going wrong from the log messages or from the m3u8 files, and fix the usage
> problem.
What about return a suggestion and give an error message?
"duration < 0, maybe you splited a too short segment, you should split
an keyframe if too short."?
>
> >
> > Signed-off-by: Steven Liu <lq at chinaffmpeg.org>
> > ---
> > libavformat/hlsenc.c | 5 +++++
> > 1 file changed, 5 insertions(+)
> >
> > diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c
> > index cb31d6aed7..76d59f5f79 100644
> > --- a/libavformat/hlsenc.c
> > +++ b/libavformat/hlsenc.c
> > @@ -2512,6 +2512,11 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt)
> >
> >         if (vs->start_pos || hls->segment_type != SEGMENT_TYPE_FMP4) {
> >             double cur_duration =  (double)(pkt->pts - vs->end_pts) * st->time_base.num / st->time_base.den;
> > +            if (cur_duration < 0) {
> > +                av_log(s, AV_LOG_WARNING, "duration < 0, maybe you splited a too short segment, "
> > +                                        "the duration will set to 1 packet duration.\n");
> > +                cur_duration = vs->duration;
> > +            }
> >             ret = hls_append_segment(s, hls, vs, cur_duration, vs->start_pos, vs->size);
> >             vs->end_pts = pkt->pts;
> >             vs->duration = 0;
> > --
> > 2.25.0
> >
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel at ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".

Thanks
Steven


More information about the ffmpeg-devel mailing list