diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 9ab8126aea..68d3aa38c1 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -1657,11 +1657,15 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index, if (timestamp < 0) timestamp = 0; - index = av_index_search_timestamp(st, timestamp, flags); - if (index < 0) - return 0; + while ((index = av_index_search_timestamp(st, timestamp, flags)) < 0) { + matroska_clear_queue(matroska); + if (matroska_parse_cluster(matroska) < 0) + break; + } matroska_clear_queue(matroska); + if (index < 0) + return 0; url_fseek(s->pb, st->index_entries[index].pos, SEEK_SET); matroska->skip_to_keyframe = !(flags & AVSEEK_FLAG_ANY);