Создал с помощью mkfifo video.jpg. Моя программа, использующая OpenCV, сохраняет туда постоянно кадры обработанного видео с камеры с помощью imwrite(«video.jpg», frame). Запустил следующую команду (192.168.0.103 - адрес моего компьютера, на котором я хочу смотреть видео, а вообще вся эта штука крутится на одноплатнике):
tail -f video.jpg | ffmpeg -i pipe: -f mjpeg -r 15 -vcodec mjpeg udp://192.168.0.103:1234
Затем на своём компьютере запускаю:
ffplay -f mjpeg udp://192.168.0.255:1234
И смотрю видео. Всё хорошо, но не устраивает задержка (где-то полсекунды) и качество.
Насколько я понимаю, главная проблема в том, что ffmpeg зачем-то перекодирует кадры из JPEG в JPEG, чем портит качество и зря тратит ресурсы. Пробую добавить -vcodec copy, но тогда получаю кучу ошибок вида
[mjpeg @ 0x7f750fc0] Application provided invalid, non monotonically increasing dts to muxer in stream 0: 11 >= 11
ЧЯДНТ? Хочу использовать JPEG, потому что ресурсов на одноплатнике мало и кодировать какой-нибудь MPEG ему будет тяжело, а вот с пропускной способностью сети особо проблем нет. Хочу использовать UDP или что-то подобное, чтобы кадры бились и терялись, но видео продолжало идти, даже если с качеством связи будет не всё в порядке, ибо минимальные задержки превыше сохранности кадров.