Примечание: Я знаю, что 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.
Вы можете увеличить пределы 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
Недоступно для Windows, оно может работать на других платформах .. но все же это должно быть установлено через API. –
Для Windows см. Этот вопрос [http://stackoverflow.com/questions/18985816/change-default-socket-buffer-size-under-windows) – aergistal