diff --git a/gst/rtsp/gstrtspsrc.c b/gst/rtsp/gstrtspsrc.c
index 2880ffc..75cc46a 100644
--- a/gst/rtsp/gstrtspsrc.c
+++ b/gst/rtsp/gstrtspsrc.c
@@ -1815,6 +1815,8 @@ gst_rtspsrc_cleanup (GstRTSPSrc * src)
     gst_object_unref (src->provided_clock);
     src->provided_clock = NULL;
   }
+
+  src->need_utc_range = FALSE;
 }
 
 static gboolean
@@ -6255,6 +6257,18 @@ gst_rtspsrc_setup_streams (GstRTSPSrc * src, gboolean async)
         goto response_error;
     }
 
+    /* parse response ranges */
+    {
+      gchar *respranges = NULL;
+      gst_rtsp_message_get_header (&response, GST_RTSP_HDR_ACCEPT_RANGES,
+                                   &respranges, 0);
+      src->need_utc_range = FALSE;
+      if (g_ascii_strcasecmp(respranges, "UTC") == 0) {
+        GST_DEBUG_OBJECT(src, "UTC clock range is accepted", stream);
+        src->need_utc_range = TRUE;
+      }
+    }
+
     /* parse response transport */
     {
       gchar *resptrans = NULL;
@@ -7177,6 +7191,21 @@ gen_range_header (GstRTSPSrc * src, GstSegment * segment)
 {
   gchar val_str[G_ASCII_DTOSTR_BUF_SIZE] = { 0, };
 
+  if (src->range && src->need_utc_range && src->range->min.type == GST_RTSP_TIME_UTC && src->range->max.type == GST_RTSP_TIME_UTC) {
+    // seconds = ((hours * 60) + mins) * 60 + secs;
+    gint hours1 = src->range->min.seconds / 3600;
+    gint mins1 = (src->range->min.seconds - hours1 * 3600) / 60;
+    gint secs1 = src->range->min.seconds - hours1 * 3600 - mins1 * 60;
+
+    gint hours2 = src->range->max.seconds / 3600;
+    gint mins2 = (src->range->max.seconds - hours2 * 3600) / 60;
+    gint secs2 = src->range->max.seconds - hours2 * 3600 - mins2 * 60;
+
+    return g_strdup_printf("clock=%4d%2d%2dT%2d%2d%2dZ-%4d%2d%2dT%2d%2d%2dZ",
+                            src->range->min2.year, src->range->min2.month, src->range->min2.day, hours1, mins1, secs1,
+                            src->range->max2.year, src->range->max2.month, src->range->max2.day, hours2, mins2, secs2);
+  }
+
   if (src->range && src->range->min.type == GST_RTSP_TIME_NOW) {
     g_strlcpy (val_str, "now", sizeof (val_str));
   } else {
diff --git a/gst/rtsp/gstrtspsrc.h b/gst/rtsp/gstrtspsrc.h
index 88bf305..e94b325 100644
--- a/gst/rtsp/gstrtspsrc.h
+++ b/gst/rtsp/gstrtspsrc.h
@@ -253,6 +253,7 @@ struct _GstRTSPSrc {
   gchar             *addr;
   gboolean           need_redirect;
   GstRTSPTimeRange  *range;
+  gboolean           need_utc_range;
   gchar             *control;
   guint              next_port_num;
   GstClock          *provided_clock;
