if (version > 0 && version <= 655)
flv->broken_sizes = 1;
}
+ } else if (!strcmp(key, "metadatacreator") && !strcmp(str_val, "MEGA")) {
+ flv->broken_sizes = 1;
}
}
}
retry:
/* pkt size is repeated at end. skip it */
- for (;; last = avio_rb32(s->pb)) {
pos = avio_tell(s->pb);
type = (avio_r8(s->pb) & 0x1F);
orig_size =
}
if (i == s->nb_streams) {
static const enum AVMediaType stream_types[] = {AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_SUBTITLE};
- av_log(s, AV_LOG_WARNING, "Stream discovered after head already parsed\n");
+ av_log(s, AV_LOG_WARNING, "%s stream discovered after head already parsed\n", av_get_media_type_string(stream_types[stream_type]));
st = create_stream(s, stream_types[stream_type]);
if (!st)
return AVERROR(ENOMEM);
ret = AVERROR(EAGAIN);
goto leave;
}
- break;
- }
// if not streamed and no duration from metadata then seek to end to find
// the duration from the timestamps
leave:
last = avio_rb32(s->pb);
- if (last != orig_size + 11 && !flv->broken_sizes) {
+ if (last != orig_size + 11 &&
+ (last != orig_size || !last) &&
+ !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);