LINUX.ORG.RU

Стриминг MJPEG

 , ,


1

1

Создал с помощью 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 или что-то подобное, чтобы кадры бились и терялись, но видео продолжало идти, даже если с качеством связи будет не всё в порядке, ибо минимальные задержки превыше сохранности кадров.

★★★★★

Последнее исправление: KivApple (всего исправлений: 1)

Ответ на: комментарий от Harald

Видео идёт, при этом качество гораздо приятнее. Но одноплатник один раз то ли завис, то ли просто перестал отвечать по SSH. Сейчас снова попробовал - вроде пока работает. Быть может, можно добавить какую-нибудь опцию, чтобы убрать эту ошибку?

KivApple ★★★★★
() автор топика
Ответ на: комментарий от Harald

Опять завис. Конечно, возможен, скажем, перегрев или ещё чего, надо будет рассмотреть эти варианты, но мало ли.

KivApple ★★★★★
() автор топика

Mjpeg несколько отличается от jpeg, так что логично что ошибки

Единственное что поможет это повысить качество конвертации в mjpeg

Или вообще конвертировать jpeg в поток vp9

ism ★★★
()

А может так:

ffmpeg -r 15 -i pipe: -c:v copy -f mjpeg udp://192.168.0.103:1234

Если к твоему текущему варианту добавить -q:v 1, то качество будет лучше. -r в любом случае должно стоять перед -i, если ты не меняешь фреймрейт, а задаёшь его для входящего потока.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.