On Sat, 5 Jun 2021 22:42:26 +0200 Gustav Grusell <gustav.grus...@gmail.com> wrote:
> Before, seeking in hls streams would always seek to the next keyframe > after the given timestamp. With this fix, if AVSEEK_FLAG_BACKWARD is > set, seeking will be to the first keyframe of the segment containing > the given timestamp. This fixes #7485. > > Signed-off-by: Gustav Grusell <gustav.grus...@gmail.com> > --- > libavformat/hls.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/libavformat/hls.c b/libavformat/hls.c > index 8fc6924c90..fb8c9b071a 100644 > --- a/libavformat/hls.c > +++ b/libavformat/hls.c > @@ -2197,6 +2197,15 @@ static int hls_read_packet(AVFormatContext *s, > AVPacket *pkt) break; > } > > + /* If AVSEEK_FLAG_BACKWARD set and not > AVSEEK_FLAG_ANY, > + * we return the first keyframe encountered */ > + if (pls->seek_flags & AVSEEK_FLAG_BACKWARD && > + !(pls->seek_flags & AVSEEK_FLAG_ANY) && > + pls->pkt->flags & AV_PKT_FLAG_KEY) { taking account of the case of using flag backward and flag any together, a logic like this is better: if ( pls->seek_flags & AVSEEK_FLAG_BACKWARD && (pls->seek_flags & AVSEEK_FLAG_ANY || pls->pkt->flags & AV_PKT_FLAG_KEY)) { .... } > + pls->seek_timestamp = AV_NOPTS_VALUE; > + break; > + } > + > tb = get_timebase(pls); > ts_diff = av_rescale_rnd(pls->pkt->dts, > AV_TIME_BASE, tb.den, AV_ROUND_DOWN) - BTW, when I used seek backward before, what I want is to get exactly packets of the specified seek time, not only the specified stream but also all streams I need. To achieve this, I will put this patch lines before this if block, like this: if (pls->seek_timestamp == AV_NOPTS_VALUE) break; if ( pls->seek_flags & AVSEEK_FLAG_BACKWARD && (pls->seek_flags & AVSEEK_FLAG_ANY || pls->pkt->flags & AV_PKT_FLAG_KEY)) { .... } if (pls->seek_stream_index < 0 || ... Regards, Lingjiang Fang _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".