diff -rup live/liveMedia/include/RTPSink.hh live.patch/liveMedia/include/RTPSink.hh
--- live/liveMedia/include/RTPSink.hh	2013-04-06 09:44:13.000000000 +0200
+++ live.patch/liveMedia/include/RTPSink.hh	2013-04-10 14:43:26.265902123 +0200
@@ -80,6 +80,7 @@ public:
   struct timeval const& initialPresentationTime() const { return fInitialPresentationTime; }
   struct timeval const& mostRecentPresentationTime() const { return fMostRecentPresentationTime; }
   void resetPresentationTimes();
+  void setPresentationTimes(struct timeval const& ref);
 
   // Hacks to allow sending RTP over TCP (RFC 2236, section 10.12):
   void setStreamSocket(int sockNum, unsigned char streamChannelId) {
diff -rup live/liveMedia/RTCP.cpp live.patch/liveMedia/RTCP.cpp
--- live/liveMedia/RTCP.cpp	2013-04-06 09:44:13.000000000 +0200
+++ live.patch/liveMedia/RTCP.cpp	2013-04-09 19:32:23.935940562 +0200
@@ -721,13 +721,21 @@ void RTCPInstance::addSR() {
 
   // Insert the NTP and RTP timestamps for the 'wallclock time':
   struct timeval timeNow;
-  gettimeofday(&timeNow, NULL);
+  if (fSink->mostRecentPresentationTime().tv_sec == 0)
+  {
+    gettimeofday(&timeNow, NULL);
+  }
+  else
+  {
+    timeNow =  fSink->mostRecentPresentationTime();
+  }
   fOutBuf->enqueueWord(timeNow.tv_sec + 0x83AA7E80);
       // NTP timestamp most-significant word (1970 epoch -> 1900 epoch)
   double fractionalPart = (timeNow.tv_usec/15625.0)*0x04000000; // 2^32/10^6
   fOutBuf->enqueueWord((unsigned)(fractionalPart+0.5));
       // NTP timestamp least-significant word
   unsigned rtpTimestamp = fSink->convertToRTPTimestamp(timeNow);
+  printf("==============RTCPInstance::addSR SEQ:%d CNT:%d RTP:%u=NTP:%d.%d\n",fSink->currentSeqNo(), fSink->packetCount(), rtpTimestamp, timeNow.tv_sec,timeNow.tv_usec);
   fOutBuf->enqueueWord(rtpTimestamp); // RTP ts
 
   // Insert the packet and byte counts:
diff -rup live/liveMedia/RTPSink.cpp live.patch/liveMedia/RTPSink.cpp
--- live/liveMedia/RTPSink.cpp	2013-04-06 09:44:13.000000000 +0200
+++ live.patch/liveMedia/RTPSink.cpp	2013-04-10 14:44:22.755925398 +0200
@@ -76,6 +76,7 @@ u_int32_t RTPSink::convertToRTPTimestamp
   u_int32_t timestampIncrement = (fTimestampFrequency*tv.tv_sec);
   timestampIncrement += (u_int32_t)(fTimestampFrequency*(tv.tv_usec/1000000.0) + 0.5); // note: rounding
 
+
   // Then add this to our 'timestamp base':
   if (fNextTimestampHasBeenPreset) {
     // Make the returned timestamp the same as the current "fTimestampBase",
@@ -91,17 +92,30 @@ u_int32_t RTPSink::convertToRTPTimestamp
   fflush(stderr);
 #endif
 
+printf("========CNT:%d======SEQ:%d RTP:%u=Base:%d=NTP:%d.%d\n",fPacketCount,fSeqNo,fTimestampBase,rtpTimestamp,tv.tv_sec,tv.tv_usec);
+
   return rtpTimestamp;
 }
 
 u_int32_t RTPSink::presetNextTimestamp() {
   struct timeval timeNow;
-  gettimeofday(&timeNow, NULL);
+
+  if (fMostRecentPresentationTime.tv_sec == 0)
+  {
+    gettimeofday(&timeNow, NULL);
+  }
+  else
+  {
+    timeNow = fMostRecentPresentationTime;
+  }
 
   u_int32_t tsNow = convertToRTPTimestamp(timeNow);
   fTimestampBase = tsNow;
   fNextTimestampHasBeenPreset = True;
 
+printf("INIT=====CNT:%d=========SEQ:%d RTP:%u=Base:%u=NTP:%d.%d\n",fPacketCount,fSeqNo,fTimestampBase,tsNow,timeNow.tv_sec,timeNow.tv_usec);
+
+
   return tsNow;
 }
 
@@ -122,6 +136,11 @@ void RTPSink::resetPresentationTimes() {
   fInitialPresentationTime.tv_usec = fMostRecentPresentationTime.tv_usec = 0;
 }
 
+void RTPSink::setPresentationTimes(struct timeval const& ref) {
+  fInitialPresentationTime.tv_sec = fMostRecentPresentationTime.tv_sec = ref.tv_sec;
+  fInitialPresentationTime.tv_usec = fMostRecentPresentationTime.tv_usec = ref.tv_usec;
+}
+
 char const* RTPSink::sdpMediaType() const {
   return "data";
   // default SDP media (m=) type, unless redefined by subclasses
