pos47_full is not updated for every packet, and for unseekable inputs the resync logic might simply skip some 0x47 sync bytes. In order to detect these let's check for modulo instead of exact value.
Also skip unrecognized sync byte distances instead of considering them as a failure of detection. It only delays the detection of the new packet size. Also note that AVIO only buffers a single packet (for UDP/mpegts, that usually means 1316 bytes), so among every ten consecutive 188-byte MPEGTS packets there will always be a seek failure, and that caused the old code to not find the 188 byte pattern across 10 consecutive packets. Signed-off-by: Marton Balint <c...@passwd.hu> --- libavformat/mpegts.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/libavformat/mpegts.c b/libavformat/mpegts.c index a065c61c40..f2b2c05d86 100644 --- a/libavformat/mpegts.c +++ b/libavformat/mpegts.c @@ -2846,12 +2846,14 @@ static void reanalyze(MpegTSContext *ts) { if (pos < 0) return; pos -= ts->pos47_full; - if (pos == TS_PACKET_SIZE) { + if (pos % TS_PACKET_SIZE == 0) { ts->size_stat[0] ++; - } else if (pos == TS_DVHS_PACKET_SIZE) { + } if (pos % TS_DVHS_PACKET_SIZE == 0) { ts->size_stat[1] ++; - } else if (pos == TS_FEC_PACKET_SIZE) { + } if (pos % TS_FEC_PACKET_SIZE == 0) { ts->size_stat[2] ++; + } else { + return; } ts->size_stat_count ++; -- 2.26.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".