--- libavformat/flvdec.c.orig	2011-05-03 17:52:08.704637368 +0300
+++ libavformat/flvdec.c	2011-05-03 18:08:54.227478218 +0300
@@ -378,7 +378,8 @@
     FLVContext *flv = s->priv_data;
     int ret, i, type, size, flags, is_audio;
     int64_t next, pos;
-    int64_t dts, pts = AV_NOPTS_VALUE;
+    int64_t pts = AV_NOPTS_VALUE;
+    static int64_t dts, dts_diff, prev_dts;
     AVStream *st = NULL;
 
  for(;;avio_skip(s->pb, 4)){ /* pkt size is repeated at end. skip it */
@@ -387,6 +388,11 @@
     size = avio_rb24(s->pb);
     dts = avio_rb24(s->pb);
     dts |= avio_r8(s->pb) << 24;
+    if (dts < prev_dts && prev_dts - dts > 1000)
+        dts = prev_dts + dts_diff;
+    else
+        dts_diff = dts - prev_dts ;
+    prev_dts = dts;
 //    av_log(s, AV_LOG_DEBUG, "type:%d, size:%d, dts:%d\n", type, size, dts);
     if (s->pb->eof_reached)
         return AVERROR_EOF;
