[FFmpeg-devel] [PATCH] avformat/mpegts: fix resync logic stuck in 192 bytes
lance.lmwang at gmail.com
lance.lmwang at gmail.com
Wed May 20 02:18:01 EEST 2020
On Tue, May 19, 2020 at 09:06:59PM +0200, Marton Balint wrote:
> 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.
Before modifying and returning directly, I considered whether pos is a multiple
of raw_packet_size, by the debug information, it's not true. Also it's possible
for the pos of two sync byte > 188/192/204 * n. If that's true, it's not correct
to look it as stats hit by the modulo logic.
>
> 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 <cus at 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 at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
--
Thanks,
Limin Wang
More information about the ffmpeg-devel
mailing list