[FFmpeg-devel] Network IO in FFmpeg (was: abstractable threading api)
Andrey Utkin
me at andrey-utkin.pp.ua
Mon Jan 6 23:53:49 CET 2014
On 06.01.2014 22:34, Michael Niedermayer wrote:
> On Mon, Jan 06, 2014 at 12:36:26PM -0700, Roger Pack wrote:
>> Interestingly, I looked into the numbers for different OS's
>> SO_RECVBUF. In OS X currently the code by default sets it to 65K from
>> a 42K default. In windows it sets it to 64K from an 8K default. In
>> linux it attempts to set it to 64K from about 100K default (it
>> actually sets it *down*) so...for at least those OS's, unless you
>> specify manually a high "buffer_size" then it is prone to packet loss,
>> especially when i-frames come "all at once" in several UDP packets,
>> etc.
>>
>> Maybe it should set it higher by default, and this is expected? It
>> appears all the OS's mentioned can handle 1MB SO_RECVBUF at least...
>
> 1mb is a much more reasonable default than a few kb for video
> when theres no thread around to pick up data quickly
Yep but default sysctl settings in linux allow no more than ~200 KB, see
/proc/sys/net/core/rmem_max (on my stations now i have 196608 and 212992
set). With such default settings, UDP loss happens anyway, and sometimes
changing sysctl settings is not possible. So changing default kernal
buffer size doesn't fix everything automatically.
But still, raising ffmpeg default value is worthwhile, because AFAIK as
a result of corresponding setsockopt() the kernal buffer size is raised
to available maximum. Although growing kernal buffer should be taken
seriously, because it affects available system resources. If there is a
lot of ffmpeg UDP processing instances, kernal buffers can take quite
big part of RAM.
--
Andrey Utkin
More information about the ffmpeg-devel
mailing list