API GStreamer в OpenCV: автовидение против приложений - PullRequest
1 голос
/ 23 октября 2019

Следующая команда Gstreamer Receiver работает нормально, когда я запускаю ее на терминале.

gst-launch-1.0 -v udpsrc port = 5004! 'application / x-rtp, полезная нагрузка = 96, имя-кодировки = H264'! Режим rtpjitterbuffer = 1! rtph264depay! h264parse! расшифровка! видеоконвертер! autovideosink

Мне нужно сделать захват этих кадров и выполнить некоторую обработку, используя Gstreamer API OpenCV. Я использовал точный конвейер в своем коде C ++, но VideoCapture не запускается. Код выглядит следующим образом:

#include <opencv2/opencv.hpp>
#include <opencv2/videoio.hpp>
using namespace cv;

#include <iostream>
using namespace std;

int main()
{
    VideoCapture cap("udpsrc port=5004 ! application/x-rtp,payload=96,encoding-name=H264 ! rtpjitterbuffer mode=1 ! rtph264depay ! h264parse ! decodebin ! videoconvert ! autovideosink", CAP_GSTREAMER);

    if (!cap.isOpened()) {
        cerr <<"VideoCapture not opened"<<endl;
        exit(-1);
    }

    while (true) {

        Mat frame;

        cap.read(frame);

        imshow("receiver", frame);

        //  Process the frame.

        if (waitKey(1) == 27) {
            break;
        }
    }

    return 0;
}

Когда я пытаюсь скомпилировать и запустить, я получаю:

(Receiver_Teal: 2292): GStreamer-CRITICAL **: gst_element_get_state: assertion 'GST_IS_ELEMENT (элемент) 'не удалось

VideoCapture не открыт

1 Ответ

1 голос
/ 23 октября 2019

Попробуйте заменить autovideosink в конце на appsink

VideoCapture cap("udpsrc port=5004 ! application/x-rtp,payload=96,encoding-name=H264 ! rtpjitterbuffer mode=1 ! rtph264depay ! h264parse ! decodebin ! videoconvert ! appsink", CAP_GSTREAMER);
...