rtsp-client: Only error out in PLAY if seeking actually failed
authorSebastian Dröge <sebastian@centricular.com>
Fri, 13 Feb 2015 10:21:16 +0000 (12:21 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Fri, 13 Feb 2015 10:21:16 +0000 (12:21 +0200)
If the media was just not seekable, we continue from whatever position we are
and let the client decide if that is what is wanted or not.

Only if the actual seek failed, we can't really recover and should error out.

gst/rtsp-server/rtsp-client.c
gst/rtsp-server/rtsp-media.c

index 8e8f73a..bedc464 100644 (file)
@@ -1163,13 +1163,16 @@ handle_play_request (GstRTSPClient * client, GstRTSPContext * ctx)
   res = gst_rtsp_message_get_header (ctx->request, GST_RTSP_HDR_RANGE, &str, 0);
   if (res == GST_RTSP_OK) {
     if (gst_rtsp_range_parse (str, &range) == GST_RTSP_OK) {
+      GstRTSPMediaStatus media_status;
+
       /* we have a range, seek to the position */
       unit = range->unit;
-      if (!gst_rtsp_media_seek (media, range)) {
-        gst_rtsp_range_free (range);
-        goto seek_failed;
-      }
+      gst_rtsp_media_seek (media, range);
       gst_rtsp_range_free (range);
+
+      media_status = gst_rtsp_media_get_status (media);
+      if (media_status == GST_RTSP_MEDIA_STATUS_ERROR)
+        goto seek_failed;
     }
   }
 
index f97490b..65ad9ff 100644 (file)
@@ -1994,6 +1994,7 @@ seek_failed:
   {
     g_rec_mutex_unlock (&priv->state_lock);
     GST_INFO ("seeking failed");
+    gst_rtsp_media_set_status (media, GST_RTSP_MEDIA_STATUS_ERROR);
     return FALSE;
   }
 preroll_failed: