stream->ssrc, client, client->cname);
}
+ if (!GST_CLOCK_TIME_IS_VALID (last_extrtptime)) {
+ GST_DEBUG_OBJECT (bin, "invalidated sync data");
+ if (bin->rtcp_sync == GST_RTP_BIN_RTCP_SYNC_RTP) {
+ /* we don't need that data, so carry on,
+ * but make some values look saner */
+ last_extrtptime = base_rtptime;
+ } else {
+ /* nothing we can do with this data in this case */
+ GST_DEBUG_OBJECT (bin, "bailing out");
+ return;
+ }
+ }
+
/* Take the extended rtptime we found in the SR packet and map it to the
* local rtptime. The local rtp time is used to construct timestamps on the
* buffers so we will calculate what running_time corresponds to the RTP
diff = ext_rtptime - last_rtptime;
/* if bigger than 1 second, we drop it */
if (diff > clock_rate) {
- GST_DEBUG_OBJECT (jitterbuffer, "dropping, too far ahead");
- drop = TRUE;
+ GST_DEBUG_OBJECT (jitterbuffer, "too far ahead");
+ /* should drop this, but some RTSP servers end up with bogus
+ * way too ahead RTCP packet when repeated PAUSE/PLAY,
+ * so still trigger rptbin sync but invalidate RTCP data
+ * (sync might use other methods) */
+ ext_rtptime = -1;
}
GST_DEBUG_OBJECT (jitterbuffer, "ext last %" G_GUINT64_FORMAT ", diff %"
G_GUINT64_FORMAT, last_rtptime, diff);