[FFmpeg-user] Transcode freezes within libavformat pthread_cond_timedwait

ZNET Subscriptions subscriptions at znet.ca
Tue Mar 8 15:18:45 CET 2016


Hello,

Hit a condition where ffmpeg will freeze within 1-2 min. from start 
during transcode with libx264 or nvenc - it actually freezes in 
pthread_cond_timedwait() / udp_read() in libavformat. Just curious what 
it may be, ideas welcome. Examples below are with ffmpeg-3.0, but recent 
pulls from git give same condition.

Just to note that I that same stream udp://239.255.254.2:1234 is 
transcoded on different server - and that runs for several years with 
little problem - with an older ffmpeg, on HP DL360 G5 server, and this 
test is  on AMD mainboard with  AMD FX(tm)-4170 Quad-Core Processor.

--------------------- example is with nvenc, same with libx264 
-------------------
ggeorgiev at gtx690:~/build/ffmpeg-3.0$ ./ffmpeg_g -i 
udp://239.255.254.2:1234?overrun_nonfatal=1 -y  -an -c:v nvenc -b:v 6M 
-f mpegts udp://239.255.254.250:1234?pkt_size=1316
ffmpeg version 3.0 Copyright (c) 2000-2016 the FFmpeg developers
   built with gcc 4.9.2 (Debian 4.9.2-10)
   configuration: --prefix=/usr/local --enable-nvenc --enable-libfaac 
--enable-libfdk-aac --enable-librtmp --enable-libx264 --enable-gpl 
--enable-nonfree --enable-fontconfig --enable-libfreetype 
--enable-libfribidi
   libavutil      55. 17.103 / 55. 17.103
   libavcodec     57. 24.102 / 57. 24.102
   libavformat    57. 25.100 / 57. 25.100
   libavdevice    57.  0.101 / 57.  0.101
   libavfilter     6. 31.100 /  6. 31.100
   libswscale      4.  0.100 /  4.  0.100
   libswresample   2.  0.101 /  2.  0.101
   libpostproc    54.  0.100 / 54.  0.100
[mpeg2video @ 0x35bdfc0] Invalid frame dimensions 0x0.
     Last message repeated 13 times
Input #0, mpegts, from 'udp://239.255.254.2:1234?overrun_nonfatal=1':
   Duration: N/A, start: 858.765211, bitrate: 17776 kb/s
   Program 3
     Stream #0:0[0x31]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), 
yuv420p(tv), 1280x720 [SAR 1:1 DAR 16:9], Closed Captions, 17200 kb/s, 
59.94 fps, 59.94 tbr, 90k tbn, 119.88 tbc
     Stream #0:1[0x34](fre): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 
5.1(side), fltp, 384 kb/s (clean effects)
     Stream #0:2[0x35](frm): Audio: ac3 (AC-3 / 0x332D4341), 48000 Hz, 
stereo, fltp, 192 kb/s (visual impaired)
Output #0, mpegts, to 'udp://239.255.254.250:1234?pkt_size=1316':
   Metadata:
     encoder         : Lavf57.25.100
     Stream #0:0: Video: h264 (nvenc) (Main), yuv420p, 1280x720 [SAR 1:1 
DAR 16:9], q=-1--1, 6000 kb/s, 59.94 fps, 90k tbn, 59.94 tbc
     Metadata:
       encoder         : Lavc57.24.102 nvenc
     Side data:
       unknown side data type 10 (24 bytes)
Stream mapping:
   Stream #0:0 -> #0:0 (mpeg2video (native) -> h264 (nvenc))
Press [q] to stop, [?] for help
frame=22864 fps= 60 q=-0.0 size=  287889kB time=00:06:20.96 
bitrate=6190.6kbits/s speed=1.01x
------------------------- after frame shown, it freezes 
------------------

------------------------- stack dump --------------------------
ggeorgiev at gtx690:~/build/ffmpeg-3.0$ gdb ffmpeg_g 1582
GNU gdb (Debian 7.7.1+dfsg-5) 7.7.1
.................
(gdb) where
#0  pthread_cond_timedwait@@GLIBC_2.3.2 () at 
../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_timedwait.S:238
#1  0x00000000006cb672 in udp_read (h=0x3599f20, buf=0x37a0180 "G", 
size=65536) at libavformat/udp.c:923
#2  0x00000000005d0aa3 in retry_transfer_wrapper (transfer_func=0x6cb5a0 
<udp_read>, size_min=1, size=65536, buf=0x37a0180 "G", h=0x3599f20)
     at libavformat/avio.c:392
#3  ffurl_read (h=0x3599f20, buf=0x37a0180 "G", size=65536) at 
libavformat/avio.c:423
#4  0x00000000005d5ec5 in fill_buffer (s=0x35ba3c0) at 
libavformat/aviobuf.c:487
#5  avio_read (size=188, buf=0x7ffd28d9e830 "G", s=0x35ba3c0) at 
libavformat/aviobuf.c:575
#6  ffio_read_indirect (s=s at entry=0x35ba3c0, 
buf=buf at entry=0x7ffd28d9e830 "G", size=size at entry=188, 
data=data at entry=0x7ffd28d9e828)
     at libavformat/aviobuf.c:610
#7  0x0000000000658dd7 in read_packet (s=s at entry=0x35996c0, 
buf=buf at entry=0x7ffd28d9e830 "G", raw_packet_size=188, 
data=data at entry=0x7ffd28d9e828)
     at libavformat/mpegts.c:2353
#8  0x0000000000659a61 in handle_packets (ts=ts at entry=0x35ca4c0, 
nb_packets=nb_packets at entry=0) at libavformat/mpegts.c:2422
#9  0x0000000000659b02 in mpegts_read_packet (s=<optimized out>, 
pkt=0x7ffd28d9eb20) at libavformat/mpegts.c:2658
#10 0x00000000006d006c in ff_read_packet (s=0x35996c0, 
pkt=0x7ffd28d9eb20) at libavformat/utils.c:697
#11 0x00000000006d33e0 in read_frame_internal (s=0x35996c0, 
pkt=0x7ffd28d9ef20) at libavformat/utils.c:1359
#12 0x00000000006d436a in av_read_frame (s=0x35996c0, 
pkt=0x7ffd28d9ef20) at libavformat/utils.c:1520
#13 0x0000000000497051 in get_input_packet (pkt=<optimized out>, 
f=<optimized out>) at ffmpeg.c:3644
#14 process_input (file_index=<optimized out>) at ffmpeg.c:3764
#15 transcode_step () at ffmpeg.c:4074
#16 transcode () at ffmpeg.c:4128
#17 0x000000000047a0a7 in main (argc=<optimized out>, 
argv=0x7ffd28d9f288) at ffmpeg.c:4319
(gdb)
--------------------------------------------------------------------

Some ideas what may cause the problem? As told, same stream is 
transcoded in parallel on older ffpeg version, and it works. Could the 
computer type make the problem?

Any ideas appreciated,
Thanks, George.




More information about the ffmpeg-user mailing list