Note: I'm aware ffmpeg and libav are different libraries. This is a problem common to both.
Disclaimer: Duplicate of SO question marked as answered but actually didn't give a proper solution.
Insufficient UDP buffer size causes broken streams for several high resolution video streams. In LibAV/FFMPEG it's possible to set the udp buffer size for udp urls (udp://...) by appending some options (buffer_size) to it.
However, for RTSP urls this is not supported.
These are the only solutions I've found:
None of these is actually a solution. From what I found it should be possible to use the API's AVOptions
to find and set this value. Or else, the AVDictionary.
It's very difficult to find how to set these throughout the documentation of either libav or ffmpeg.
Update:
The following patches have been submited to Libav tackling this topic, thanks to Libav developer @lu_zero :
Which should offer a hint on how to implement those, still these are not yet available through the official stable API.
FYI, the latest ffmpeg2.8.5 already has this option. I use it to set the the buffer_size
av_dict_set(&options, "buffer_size", "655360", 0);
and I got this output:
[udp @ 0xb4945090] attempted to set receive buffer to size 655360 but it only ended up set as 327680 After some searching I run
echo 2097152 > /proc/sys/net/core/rmem_max
to fix the warning
Since this commit it is enough to pass buffer_size
as option and it gets forwarded to the udp
protocol through the rtp
protocol.
I tested and it works as intended.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With