diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 1e9f2877dff6d604da44098961cc2666261533f9..4cbfd7e49a357de7be89336b94157623ce64072a 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1599,6 +1599,9 @@ static int rtsp_read_seek(AVFormatContext *s, int stream_index,
     case RTSP_STATE_IDLE:
         break;
     case RTSP_STATE_PLAYING:
+        if (rtsp_read_pause(s) != 0)
+            return -1;
+        rt->state = RTSP_STATE_SEEKING;
         if (rtsp_read_play(s) != 0)
             return -1;
         break;
diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h
index 900eae525bbb7a66f8c274064e561bc76f4a3f38..8824ede26c3a1fb4d9ef9afc92c7f3b9bc153902 100644
--- a/libavformat/rtsp.h
+++ b/libavformat/rtsp.h
@@ -151,6 +151,7 @@ enum RTSPClientState {
     RTSP_STATE_IDLE,    /**< not initialized */
     RTSP_STATE_PLAYING, /**< initialized and receiving data */
     RTSP_STATE_PAUSED,  /**< initialized, but not receiving data */
+    RTSP_STATE_SEEKING, /**< initialized, requesting a seek */
 };
 
 /**