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

zhilizhao quinkblack at foxmail.com
Sun Aug 16 18:15:27 EEST 2020



> On Aug 17, 2020, at 11:02 AM, Steven Liu <lingjiujianke at gmail.com> wrote:
> 
> zhilizhao <quinkblack at foxmail.com <mailto: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 <mailto: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.”?

I  suggest naming the option (“hls_time” and “hls_segment_size” maybe?) in the message
so the user not only know what’s going wrong but also how to fix it.

>> 
>>> 
>>> 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
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org <mailto:ffmpeg-devel at ffmpeg.org>
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel <https://ffmpeg.org/mailman/listinfo/ffmpeg-devel>
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org <mailto:ffmpeg-devel-request at ffmpeg.org> with subject "unsubscribe".



More information about the ffmpeg-devel mailing list