X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavformat%2Fhlsenc.c;fp=libavformat%2Fhlsenc.c;h=f7eb2411b0750e3308939691d2844527fde6898a;hb=b5ca8f2c66954614d81579082025f580efc0cffc;hp=4471858222e5ec9636dacb6af5b5a53b0c1ef460;hpb=1ee52b2b6c1f6c9618e435b5ed7608442308efe6;p=ffmpeg diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 4471858222e..f7eb2411b07 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -2572,13 +2572,14 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) vs->packets_written++; if (oc->pb) { + int64_t keyframe_pre_pos = avio_tell(oc->pb); ret = ff_write_chained(oc, stream_index, pkt, s, 0); - vs->video_keyframe_size += pkt->size; - if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) && (pkt->flags & AV_PKT_FLAG_KEY)) { - vs->video_keyframe_size = avio_tell(oc->pb); - } else { - vs->video_keyframe_pos = avio_tell(vs->out); + if ((st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) && + (pkt->flags & AV_PKT_FLAG_KEY) && !keyframe_pre_pos) { + av_write_frame(oc, NULL); /* Flush any buffered data */ + vs->video_keyframe_size = avio_tell(oc->pb) - keyframe_pre_pos; } + vs->video_keyframe_pos = vs->start_pos; if (hls->ignore_io_errors) ret = 0; }