[FFmpeg-devel] [PATCH] avformat/hls Implement support for using AVSEEK_FLAG_BACKWARD when seeking
Lingjiang Fang
vacingfang at foxmail.com
Tue May 25 05:24:02 EEST 2021
On Fri, 14 May 2021 21:42:25 +0200
Gustav Grusell <gustav.grusell at 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 #6850. ---
> libavformat/hls.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/libavformat/hls.c b/libavformat/hls.c
> index 8fc6924c90..3f1fd2cb70 100644
> --- a/libavformat/hls.c
> +++ b/libavformat/hls.c
> @@ -2199,10 +2199,15 @@ static int hls_read_packet(AVFormatContext
> *s, AVPacket *pkt)
> tb = get_timebase(pls);
> ts_diff = av_rescale_rnd(pls->pkt->dts,
> AV_TIME_BASE,
> - tb.den, AV_ROUND_DOWN) -
> - pls->seek_timestamp;
> - if (ts_diff >= 0 && (pls->seek_flags &
> AVSEEK_FLAG_ANY ||
> - pls->pkt->flags &
> AV_PKT_FLAG_KEY)) {
> + tb.den, AV_ROUND_DOWN) -
> + pls->seek_timestamp;
only format change, maybe better to revert if you don't mean to do so
:)
> + /* 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) ||
> + (ts_diff >= 0 && (pls->seek_flags &
> AVSEEK_FLAG_ANY ||
> + pls->pkt->flags &
> AV_PKT_FLAG_KEY))) { pls->seek_timestamp = AV_NOPTS_VALUE;
> break;
> }
Regards,
Lingjiang Fang
More information about the ffmpeg-devel
mailing list