Opened 11 years ago

Closed 11 years ago

#2962 closed defect (fixed)

MPEG TS stream: Failed assertion

Reported by: Underground78 Owned by:
Priority: important Component: avformat
Version: git-master Keywords: mpegts crash abort regression
Cc: Blocked By:
Blocking: Reproduced by developer: yes
Analyzed by developer: no

Description

Summary of the bug:
Trying to open a MPEG TS stream leads to a failed assertion in libavformat/mpegts.c at line 1865: av_assert0(pos >= TS_PACKET_SIZE);. This assertion was added in https://github.com/FFmpeg/FFmpeg/commit/0f2f65bd583576ef8c12eea6088c84d4468f5804.

How to reproduce:
I was able to reproduce using a RTSP stream but unfortunately it's locked by my ISP (Free in France). Someone else was able to reproduce with another locked stream from another ISP.

Change History (8)

comment:1 by Underground78, 11 years ago

Note to self: Original ticket: https://trac.mpc-hc.org/ticket/3466

comment:2 by Carl Eugen Hoyos, 11 years ago

Keywords: mpegts crash abort added
Priority: normalimportant

If you cannot provide a sample, please provide a gdb backtrace.

comment:3 by Underground78, 11 years ago

Here is a package to reproduce the bug on Windows streaming a file with VLC (thanks to Kasper): https://dl.dropboxusercontent.com/u/16282309/MPC-HC/rtp.7z.

  1. Run the .bat file
  2. Run ffmpeg -i rtp://127.0.0.1:4444

You will have to adapt that on Linux but it should be pretty much straightforward.

Last edited 11 years ago by Underground78 (previous) (diff)

comment:4 by Carl Eugen Hoyos, 11 years ago

Keywords: regression added
Reproduced by developer: set
Status: newopen
(gdb) r -i rtp://127.0.0.1:4444
Starting program: /home/cehoyos/test/cehoyos/FFmpeg/ffmpeg_g -i rtp://127.0.0.1:4444
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
ffmpeg version N-56297-g7ac6c63 Copyright (c) 2000-2013 the FFmpeg developers
  built on Sep 15 2013 23:50:37 with gcc 4.7 (SUSE Linux)
  configuration: --enable-gpl
  libavutil      52. 43.100 / 52. 43.100
  libavcodec     55. 31.101 / 55. 31.101
  libavformat    55. 16.102 / 55. 16.102
  libavdevice    55.  3.100 / 55.  3.100
  libavfilter     3. 84.100 /  3. 84.100
  libswscale      2.  5.100 /  2.  5.100
  libswresample   0. 17.103 /  0. 17.103
  libpostproc    52.  3.100 / 52.  3.100
Assertion pos >= 188 failed at libavformat/mpegts.c:1865

Program received signal SIGABRT, Aborted.
0x00007ffff6048d25 in raise () from /lib64/libc.so.6
(gdb) bt
#0  0x00007ffff6048d25 in raise () from /lib64/libc.so.6
#1  0x00007ffff604a1a8 in abort () from /lib64/libc.so.6
#2  0x0000000000561755 in handle_packet (ts=ts@entry=0x16f0360,
    packet=packet@entry=0x17249a8 "G@D\033") at libavformat/mpegts.c:1865
#3  0x0000000000565aff in ff_mpegts_parse_packet (ts=0x16f0360, pkt=<optimized out>,
    buf=0x17249a8 "G@D\033", buf@entry=0x17248ec "G", len=1128, len@entry=1316)
    at libavformat/mpegts.c:2413
#4  0x000000000059efb4 in mpegts_handle_packet (ctx=<optimized out>, data=0x16ee320,
    st=<optimized out>, pkt=<optimized out>, timestamp=<optimized out>, buf=0x17248ec "G",
    len=1316, seq=58721, flags=2) at libavformat/rtpdec_mpegts.c:86
#5  0x000000000059952c in rtp_parse_packet_internal (s=s@entry=0x16ea1e0,
    pkt=pkt@entry=0x7fffffffd190, buf=0x17248ec "G", buf@entry=0x17248e0 "\200\241\345a",
    len=1316, len@entry=1328) at libavformat/rtpdec.c:638
#6  0x000000000059a6e1 in rtp_parse_one_packet (len=1328, bufptr=<optimized out>,
    pkt=0x7fffffffd190, s=0x16ea1e0) at libavformat/rtpdec.c:785
#7  ff_rtp_parse_packet (s=0x16ea1e0, pkt=pkt@entry=0x7fffffffd190,
    bufptr=bufptr@entry=0x16e9cc0, len=len@entry=1328) at libavformat/rtpdec.c:815
#8  0x00000000005aa43b in ff_rtsp_fetch_packet (s=0x16e8080, pkt=0x7fffffffd190)
    at libavformat/rtsp.c:2034
#9  0x00000000005ca312 in ff_read_packet (s=s@entry=0x16e8080, pkt=pkt@entry=0x7fffffffd190)
    at libavformat/utils.c:651
#10 0x00000000005cc230 in read_frame_internal (s=s@entry=0x16e8080,
    pkt=pkt@entry=0x7fffffffd3b0) at libavformat/utils.c:1307
#11 0x00000000005cf71f in avformat_find_stream_info (ic=0x16e8080, options=0x0)
    at libavformat/utils.c:2791
#12 0x0000000000460acb in open_input_file (o=o@entry=0x7fffffffd700,
    filename=<optimized out>) at ffmpeg_opt.c:809
#13 0x000000000045f5b4 in open_files (inout=inout@entry=0xc9975f "input",
    open_file=open_file@entry=0x4606f0 <open_input_file>, l=<optimized out>,
    l=<optimized out>) at ffmpeg_opt.c:2494
#14 0x0000000000466909 in ffmpeg_parse_options (argc=argc@entry=3,
    argv=argv@entry=0x7fffffffdd98) at ffmpeg_opt.c:2531
#15 0x000000000045d198 in main (argc=3, argv=0x7fffffffdd98) at ffmpeg.c:3393

comment:5 by Carl Eugen Hoyos, 11 years ago

Command lines to reproduce the problem:

$ ffmpeg -f lavfi -i testsrc stream.ts

...

$ vlc stream.ts --sout="#rtp{dst=127.0.0.1,port=4444,sdp=rtsp://127.0.0.1:9080/test.sdp, mux=ts}" --loop

comment:6 by Underground78, 11 years ago

Any news about this?

comment:7 by Underground78, 11 years ago

Note that if I comment out the assert, the IPTV stream I used to reproduce this issue can be decoded just fine.

comment:8 by Michael Niedermayer, 11 years ago

Resolution: fixed
Status: openclosed
Note: See TracTickets for help on using tickets.