diff --git a/libavformat/oggdec.c b/libavformat/oggdec.c
index 29e4907e86..43af23d284 100644
--- a/libavformat/oggdec.c
+++ b/libavformat/oggdec.c
@@ -490,6 +490,18 @@ ogg_get_length (AVFormatContext * s)
 
     ogg_restore (s, 0);
 
+    ogg_save (s);
+    url_fseek (s->pb, 0, SEEK_SET);
+    while (!ogg_read_page (s, &i)){
+        if (ogg->streams[i].granule != -1 && ogg->streams[i].granule != 0 &&
+            ogg->streams[i].codec) {
+            s->streams[i]->duration -=
+                ogg_gptopts (s, i, ogg->streams[i].granule, NULL);
+            break;
+        }
+    }
+    ogg_restore (s, 0);
+
     return 0;
 }