2015-03-16 1 views
1

Примечание: Я знаю, что ffmpeg и libav являются different libraries. Это проблема, общая для обоих.Установите размер буфера RTSP/UDP в FFmpeg/LibAV

Отказ от ответственности: Дубликат SO question отмечен как ответил, но на самом деле не давал правильное решение.


Недостаточный размер буфера UDP вызывает сломанные потоки для нескольких потоков видео высокого разрешения. В LibAV/FFMPEG можно установить размер udp-буфера для udp-urls (udp: // ...), добавив к нему options (buffer_size).

Однако для URL-адресов RTSP это not supported.

Это единственные решения, которые я нашел:

  • Перестроение FFmpeg/libav меняющийся в UDP_MAX_PKT_SIZE в udp.c исходном файле.
  • Использование nasty hack для поиска и изменения требуемого значения путем внесения некоторых частных структур.
  • Использование другой библиотеки декодирования (предлагаемое решение для вышеупомянутого связанного SO question).

Ни одно из них на самом деле не является решением. Из того, что я нашел, должно быть возможно использовать API AVOptions, чтобы найти и установить это значение. Или еще, AVDictionary.

Очень сложно найти, как установить их во всей документации libav или ffmpeg.

Update:

Следующие участки были занесены к Libav решению этой темы, благодаря Libav разработчику @lu_zero:

Который должен дайте нам подсказку о том, как их реализовать, но пока они не доступны через официальный стабильный API.

+1

Вы можете увеличить пределы OS UDP буфера по умолчанию, я думаю. [Улучшение производительности UDP] (https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Web_Platform/5/html/Administration_And_Configuration_Guide/jgroups-perf-udpbuffer.html) – aergistal

+0

Недоступно для Windows, оно может работать на других платформах .. но все же это должно быть установлено через API. –

+1

Для Windows см. Этот вопрос [http://stackoverflow.com/questions/18985816/change-default-socket-buffer-size-under-windows) – aergistal

ответ

2

Поскольку this совершить достаточно, чтобы пройти buffer_size как вариант, и он получает направляется к протоколу udp через протокол rtp.

Я тестировал и работает по назначению.

0

FYI, последняя версия ffmpeg2.8.5 уже имеет этот параметр. Я использую его, чтобы установить в buffer_size

av_dict_set(&options, "buffer_size", "655360", 0); 

и я получил этот результат:

[УДП @ 0xb4945090] попытались установить буфер приема в размере 655360, но только в конечном итоге набор в 327680 После некоторого поиск Я бегу

echo 2097152 > /proc/sys/net/core/rmem_max 

исправить предупред