[FFmpeg-cvslog] avformat/flvdec: Detect broken sizes (OBS 0.655b), disable resync for affected files

Michael Niedermayer git at videolan.org
Sat Sep 19 18:44:28 CEST 2015


ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Sat Sep 19 18:22:31 2015 +0200| [e3cf978cdda91df923e3e5d1f1e66133dbbe6218] | committer: Michael Niedermayer

avformat/flvdec: Detect broken sizes (OBS 0.655b), disable resync for affected files

Fixes Ticket4867
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=e3cf978cdda91df923e3e5d1f1e66133dbbe6218
---

 libavformat/flvdec.c |   13 ++++++++++++-
 1 file changed, 12 insertions(+), 1 deletion(-)

diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 1221dab..16d25e9 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -58,6 +58,8 @@ typedef struct FLVContext {
     int searched_for_end;
 
     uint8_t resync_buffer[2*RESYNC_BUFFER_SIZE];
+
+    int broken_sizes;
 } FLVContext;
 
 static int probe(AVProbeData *p, int live)
@@ -516,6 +518,15 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream,
                     }
                 }
             }
+            if (amf_type == AMF_DATA_TYPE_STRING) {
+                if (!strcmp(key, "encoder")) {
+                    int version = -1;
+                    if (1 == sscanf(str_val, "Open Broadcaster Software v0.%d", &version)) {
+                        if (version > 0 && version <= 655)
+                            flv->broken_sizes = 1;
+                    }
+                }
+            }
         }
 
         if (amf_type == AMF_DATA_TYPE_OBJECT && s->nb_streams == 1 &&
@@ -1127,7 +1138,7 @@ retry_duration:
 
 leave:
     last = avio_rb32(s->pb);
-    if (last != orig_size + 11) {
+    if (last != orig_size + 11 && !flv->broken_sizes) {
         av_log(s, AV_LOG_ERROR, "Packet mismatch %d %d\n", last, orig_size + 11);
         avio_seek(s->pb, pos + 1, SEEK_SET);
         ret = resync(s);



More information about the ffmpeg-cvslog mailing list