#10202: FFMPEG freeze/hangs while downloading M3u8
---------------------------------+-------------------------------------
Reporter: xeontwo | Type: defect
Status: new | Priority: important
Component: ffmpeg | Version: 4.4.3
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
---------------------------------+-------------------------------------
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
--
Ticket URL: <https://trac.ffmpeg.org/ticket/10202>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker_______________________________________________
FFmpeg-trac mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-trac
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".