diff -Naur gst-plugins-good-1.11.1_orig/gst/rtpmanager/gstrtpjitterbuffer.c gst-plugins-good-1.11.1_changed/gst/rtpmanager/gstrtpjitterbuffer.c
--- gst-plugins-good-1.11.1_orig/gst/rtpmanager/gstrtpjitterbuffer.c	2016-12-04 12:25:17.000000000 +0300
+++ gst-plugins-good-1.11.1_changed/gst/rtpmanager/gstrtpjitterbuffer.c	2017-02-03 18:48:37.192498143 +0300
@@ -2929,7 +2929,7 @@
     GST_DEBUG_OBJECT (jitterbuffer, "First buffer #%d", seqnum);
 
     /* calculate a pts based on rtptime and arrival time (dts) */
-    pts = rtp_jitter_buffer_calculate_pts (priv->jbuf, dts, rtptime,
+    pts = rtp_jitter_buffer_calculate_pts (priv->jbuf, dts, estimated_dts, rtptime,
         gst_element_get_base_time (GST_ELEMENT_CAST (jitterbuffer)));
 
     /* we don't know what the next_in_seqnum should be, wait for the last
@@ -2981,7 +2981,8 @@
     g_queue_clear (&priv->gap_packets);
 
     /* calculate a pts based on rtptime and arrival time (dts) */
-    pts = rtp_jitter_buffer_calculate_pts (priv->jbuf, dts, rtptime,
+    /* If we estimated the DTS, don't consider it in the clock skew calculations */
+    pts = rtp_jitter_buffer_calculate_pts (priv->jbuf, dts, estimated_dts, rtptime,
         gst_element_get_base_time (GST_ELEMENT_CAST (jitterbuffer)));
 
     if (G_LIKELY (gap == 0)) {
diff -Naur gst-plugins-good-1.11.1_orig/gst/rtpmanager/rtpjitterbuffer.c gst-plugins-good-1.11.1_changed/gst/rtpmanager/rtpjitterbuffer.c
--- gst-plugins-good-1.11.1_orig/gst/rtpmanager/rtpjitterbuffer.c	2017-01-10 17:23:13.000000000 +0300
+++ gst-plugins-good-1.11.1_changed/gst/rtpmanager/rtpjitterbuffer.c	2017-02-03 18:48:37.192498143 +0300
@@ -690,7 +690,7 @@
 
 GstClockTime
 rtp_jitter_buffer_calculate_pts (RTPJitterBuffer * jbuf, GstClockTime dts,
-    guint32 rtptime, GstClockTime base_time)
+    gboolean estimated_dts, guint32 rtptime, GstClockTime base_time)
 {
   guint64 ext_rtptime;
   GstClockTime gstrtptime, pts;
@@ -703,7 +703,7 @@
    * Only reset if valid input time, which is likely for UDP input
    * where we expect this might happen due to async thread effects
    * (in seek and state change cycles), but not so much for TCP input */
-  if (GST_CLOCK_TIME_IS_VALID (dts) &&
+  if (GST_CLOCK_TIME_IS_VALID (dts) && !estimated_dts &&
       jbuf->mode != RTP_JITTER_BUFFER_MODE_SLAVE &&
       jbuf->base_time != -1 && jbuf->last_rtptime != -1) {
     GstClockTime ext_rtptime = jbuf->ext_rtptime;
diff -Naur gst-plugins-good-1.11.1_orig/gst/rtpmanager/rtpjitterbuffer.h gst-plugins-good-1.11.1_changed/gst/rtpmanager/rtpjitterbuffer.h
--- gst-plugins-good-1.11.1_orig/gst/rtpmanager/rtpjitterbuffer.h	2016-11-04 17:49:06.000000000 +0300
+++ gst-plugins-good-1.11.1_changed/gst/rtpmanager/rtpjitterbuffer.h	2017-02-03 18:48:40.724469870 +0300
@@ -189,7 +189,7 @@
                                                           guint64 *timestamp, guint32 *clock_rate,
                                                           guint64 *last_rtptime);
 
-GstClockTime          rtp_jitter_buffer_calculate_pts    (RTPJitterBuffer * jbuf, GstClockTime dts,
+GstClockTime          rtp_jitter_buffer_calculate_pts    (RTPJitterBuffer * jbuf, GstClockTime dts, gboolean estimated_dts,
                                                           guint32 rtptime, GstClockTime base_time);
 
 #endif /* __RTP_JITTER_BUFFER_H__ */
