[Libav-user] "Circular buffer overrun" error when reading UDP stream

Adi Shavit adishavit at gmail.com
Tue Jul 30 08:37:50 CEST 2013


Hi Alex,

> See http://ffmpeg.gusari.org/viewtopic.php?f=12&t=624. For ffmpeg
> command line, you can specify the UDP buffer size in the URL, e.g.
> udp://localhost:5002?fifo_size=1000000.

Thanks. I did actually see this post, though I get errors from the
overrun_nonfatal argument.

>
> Buy if you get this message because you followed my advice about max
> 15 FPS, you are doing something wrong on your side: you should pull
> the buffers faster.

Yes, I'm dropping frames where I can to decrease fps (though not as
you suggested (yet)).
But I'm decoding multiple streams simultaneously so my CPU is pretty stressed.
I don't use any sleep because I actually prefer processing frames early.
I also don't mind dropped frames in case of processing lag.


> Did you add a sleep in the decoder loop? If your
> client is at 100% CPU utilization,  faster settings for h264 decoder
> may help.

What settings are those?

>
> The only "legitimate" case when increase of the fifo size may really
> be the correct solution, is a slow, unreliable network. In such case,
> UDP packets may arrive significantly out of order, and nothing but
> fifo size will compensate that.

ok...

>
> Note that overrun_nonfatal will break the video output. If the network
> is very bad, and you have IDR frames sent often enough, or if you use
> an intra-refresh stream.

Sorry, I don't understand what this means.


Basically, my requirements are as follows:

1. Decode multiple video streams simultaneously from a single MTP stream.
2. I do not display the frames, only process the pixels.
3. I'm not very sensitive about dropped frames.
4. I prefer to process the frames as early as possible, even before
they would have been displayed in "playing-time".

If the UDP network stream is bad, then just wait until you get some
proper packets/frames.

Thanks,
Adi


More information about the Libav-user mailing list