diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 1b29740f41b1113d2baa5b1197b0112c44101633..81a71d39f4cb9ec56f34d24233a73d6f2f17dd41 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -801,7 +801,13 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
                            type, size, flags);
 
 skip:
-            avio_seek(s->pb, next, SEEK_SET);
+            if (avio_seek(s->pb, next, SEEK_SET) != next) {
+                // This can happen if flv_read_metabody above read past
+                // next, on a non-seekable input, and the preceding data has
+                // been flushed out from the IO buffer.
+                av_log(s, AV_LOG_ERROR, "Unable to seek to the next packet\n");
+                return AVERROR_INVALIDDATA;
+            }
             continue;
         }