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

Steven Liu lq at chinaffmpeg.org
Mon Aug 17 03:49:44 EEST 2020


output a warning message if the target duration of the segment.
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.

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



More information about the ffmpeg-devel mailing list