GStreamer извлекает изображение JPEG из потока MJPEG UDP

Я использую следующую команду, чтобы попытаться сделать одно изображение JPEG из MJPEG через поток UDP с помощью GStreamer:

gst-launch-1.0 udpsrc port=53247 ! jpegdec ! jpegenc ! filesink location=test.jpeg

Проблема в том, что даже если мне удастся получить снимок потока в виде изображения JPEG, конвейер не останавливается, и размер выходного изображения продолжает расти, пока я вручную не остановлю конвейер.

Я также попробовал вариант num-buffers=1, но тогда я получаю только полностью черное изображение.

Есть ли команда, которая позволила бы мне правильно сделать снимок в формате JPEG из потока?


person hyo29    schedule 02.09.2016    source источник
comment
как насчет декодирования, а затем кодирования с помощью jpegenc?   -  person nayana    schedule 05.09.2016
comment
При num-buffers=1 вы получаете только один пакет udp, поэтому не можете получить полный образ. Попробуйте с imagefreeze, он заморозит поток после одного изображения (не уверен, что это нормально для вас). Если вам нужно правильное решение, напишите приложение GStreamer (используйте тот же конвейер, что и выше, но остановите поток после того, как один буфер пройдет через панель файловых хранилищ.   -  person matilda gl    schedule 06.09.2016
comment
@otopolsky Спасибо за ваш ответ, я попытался заменить jpegparse на jpegdec ! jpegenc. Это дало мне тот же результат, что и моя первая команда, но, поскольку jpegparse находится в плохих плагинах Gstreamer, я думаю, что использование модулей jpegdec и jpegenc более уместно.   -  person hyo29    schedule 06.09.2016
comment
что произойдет, если вы установите num-buffers=1 и добавите -e к gst-launch?   -  person nayana    schedule 06.09.2016
comment
Я получаю нечитаемое изображение в формате jpeg, вероятно, из-за того, что описал @matildagl. Если я использую только -e или imagefreeze, конвейер не остановится, пока я не нажму CTRL+C   -  person hyo29    schedule 06.09.2016


Ответы (1)


Я нашел решение, которое частично отвечает на мой вопрос.

Эмпирическим путем я установил для переменной num-buffers значение 75, чего в моем случае достаточно, чтобы получить полное изображение и дать мне файлы JPEG с разумным весом.

Команда следующая:

gst-launch-1.0 -e udpsrc port=53247 num-buffers=75 ! jpegdec ! jpegenc ! filesink location=test.jpeg

Но так как num-buffers выставляется опытным путем, думаю это решение не самое адаптированное.

person hyo29    schedule 06.09.2016