C ++ Невозможно интегрировать конвейер JPEG в OpenCV

Я просмотрел тонны потоков в OpenCV и Gstreamer и просто не могу решить проблему с моей ошибкой. Я пытаюсь открыть конвейер Gstreamer в OpenCV. Я собрал OpenCV с GStreamer, и на шаге CMake написано «ДА», что указывает на успешную сборку OpenCV. Команда для получения потока отлично работает из командной строки, однако она просто отображает фрейм и зависает в OpenCV.

Мой синтаксис для сервера:

gst-launch-1.0 v4l2src device="/dev/video0" ! video/x-raw,format=I420,width=640,height=480,framerate=15/1 ! jpegenc ! rtpjpegpay ! udpsink host=<IP Address> port=5000

Мой синтаксис в OpenCV для клиента (C ++):

Mat frame;

//create video capture from video camera
VideoCapture cap("udpsrc port=5000 ! application/x-rtp,encoding-
name=JPEG,payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink ! appsink");

cap.set(CV_CAP_PROP_FRAME_WIDTH, 640);
cap.set(CV_CAP_PROP_FRAME_HEIGHT, 480);
for(;;)
{
cap >> frame;

char c = (char)waitKey(1);

//![display]
imshow(window_name, frame);

frame.release();
}

Ошибка:

Плагин GStreamer: воспроизведение встроенного видео остановлено; модуль
autovideosink0-actual-sink-xvimage сообщил: окно вывода было закрыто
Ошибка OpenCV: неопределенная ошибка (GStreamer: невозможно запустить конвейер)
в icvStartPipeline, файл
/home/dev/Downloads/OpenCV/opencv-3.0.0/modules/videoio/src/cap_gstreamer.cpp,
строка 383 завершается, вызывается после броска экземпляра
‘cv :: Exception’ что (): / home / dev / Загрузки / OpenCV / opencv-
3.0.0 / modules / videoio / src / cap_gstreamer.cpp: 383: ошибка: (-2) GStreamer: невозможно запустить конвейер в функции icvStartPipeline

Пожалуйста, предоставьте любую помощь, которую я прошел по крайней мере через 20 сообщений стека, и я не ближе к тому, когда я начал, за исключением того, что Gstreamer был включен в OpenCV. Я даже пробовал разные версии OpenCV.

Спасибо

3

Решение

Ограничение VideoCapture («порт udpsrc = 5000! Application / x-rtp, имя-кодировки = JPEG, полезная нагрузка = 26! Rtpjpegdepay! Jpegdec! Videoconvert! Appsink»);

После долгих поисков документации Gstreamer сегодня я решил проблему. Добавление видеоконвертера решило проблему. Согласно документации Gstreamer, видеоконвертер автоматически конвертирует данные в подходящий для приложения формат. Это позволяет правильно читать его в OpenCV VideoCapture.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]