Opened 15 months ago

#10202 new defect

FFMPEG freeze/hangs while downloading M3u8

Reported by: xeontwo Owned by:
Priority: important Component: ffmpeg
Version: 4.4.3 Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:

The ffmpeg freezes/hangs while downloading a m3u8 stream

How to reproduce:

%  /usr/bin/ffmpeg -stats -stats_period 1 -progress pipe:1 -loglevel panic -y -nostdin -hide_banner -dts_delta_threshold 3600 -dts_error_threshold 3600 -probesize 10000000 -analyzeduration 10000000 -fflags +genpts+discardcorrupt -err_detect ignore_err -copyts -start_at_zero -correct_ts_overflow 0 -vsync 0 -avoid_negative_ts disabled -max_interleave_delta 0 -timeout 15000000 -reconnect 1 -reconnect_on_network_error 1 -reconnect_streamed 1 -reconnect_delay_max 15 -i http://any_input/local.m3u8 -map 0 -dn -ignore_unknown -vcodec copy -scodec copy -acodec copy -individual_header_trailer 0 -f segment -segment_format mpegts -segment_time 6 -segment_list_type m3u8 -segment_list_flags +live -segment_wrap 35 -segment_list_size 20 -segment_list /var/www/stream.m3u8 /var/www/stream_%d.ts

FFMPEG version/compilation details:

ffmpeg version 4.4.3-0ubuntu1~18.04.sav2 Copyright (c) 2000-2022 the FFmpeg developers
  built with gcc 7 (Ubuntu 7.5.0-3ubuntu1~18.04)
  configuration: --prefix=/usr --extra-version='0ubuntu1~18.04.sav2' --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-amf --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librist --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-crystalhd --enable-libmfx --enable-libsvtav1 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-librav1e --enable-shared

This issue is happening since ffmpeg >3.4. I've made a strace on the ffmpge process, and it shows only a looping HTTP Request.

~# strace -p 4135896
strace: Process 4135896 attached
restart_syscall(<... resuming interrupted nanosleep ...>) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
poll([{fd=10, events=POLLOUT}], 1, 100) = 1 ([{fd=10, revents=POLLOUT}])
sendto(10, "GET /local.m3u8"..., 179, MSG_NOSIGNAL, NULL, 0) = 179
poll([{fd=10, events=POLLIN}], 1, 100)  = 0 (Timeout)
poll([{fd=10, events=POLLIN}], 1, 100)  = 1 ([{fd=10, revents=POLLIN}])
recvfrom(10, "HTTP/1.1 206 Partial Content\r\nAc"..., 8192, 0, NULL, NULL) = 227
poll([{fd=10, events=POLLIN}], 1, 100)  = 1 ([{fd=10, revents=POLLIN}])
recvfrom(10, "#EXTM3U\n#EXT-X-VERSION:3\n#EXT-X-"..., 32768, 0, NULL, NULL) = 398
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
poll([{fd=10, events=POLLOUT}], 1, 100) = 1 ([{fd=10, revents=POLLOUT}])
sendto(10, "GET /local.m3u8"..., 179, MSG_NOSIGNAL, NULL, 0) = 179
poll([{fd=10, events=POLLIN}], 1, 100)  = 0 (Timeout)
poll([{fd=10, events=POLLIN}], 1, 100)  = 1 ([{fd=10, revents=POLLIN}])
recvfrom(10, "HTTP/1.1 206 Partial Content\r\nAc"..., 8192, 0, NULL, NULL) = 625
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
nanosleep({tv_sec=0, tv_nsec=100000000}, 0x7fff11f8f700) = 0
poll([{fd=10, events=POLLOUT}], 1, 100) = 1 ([{fd=10, revents=POLLOUT}])

After killing ffmpeg via SIGKILL, the issue is solved.

Is there a way to kill ffmpeg after X seconds without writing the output? (Output timeout, perhaps)? Or fix this issue?

Thanks

Change History (0)

Note: See TracTickets for help on using tickets.