Gstreamer с Opencv в Yocto Linux - PullRequest
       11

Gstreamer с Opencv в Yocto Linux

1 голос
/ 05 марта 2020

У меня две сборки Yocto, работающие на разных процессорах, я пытаюсь написать код OpenCV с помощью GStreamer, одна из которых отправит пакет, а другая - получит. Проблема, с которой я сталкиваюсь, заключается в том, что в сценарии приемника программа застревает в функции 'VideoCapture' и больше не выполняется. Ресивер подключен к экрану HDMI, после запуска объектного файла на мониторе нет изменений. Ниже я прилагаю код.

#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>

using namespace std;
using namespace cv;

int main(void)
{
        cout<<"in main function"<<endl;
        const char* gstrec="udpsrc port=5000 ! application/x-rtp,media=video,encoding-name=H264,payload=96,clock-rate=90000,framerate=30/1 ! \
                            rtpjitterbuffer latency=10 drop-on-latency=TRUE ! rtph264depay ! video/x-h264 ! h264parse ! decodebin ! video/x-raw,\
                            format=NV12 ! videoconvert ! video/x-raw,format=BGR ! appsink";

        cout<<"Gstreamer script running"<<endl;
        VideoCapture cap(gstrec,CAP_GSTREAMER);
        cout<<"You are out of VideoCapture function"<<endl;

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

    cout<<"The videocapture is opened"<<endl;

    Mat frame;

    for(;;) {

        cap.read(frame);
        if(frame.empty())
            break;

        cout<<"In while loop"<<endl;
        imshow("Receiver", frame);
        if(waitKey(1) == 'r')
            break;
    }
    destroyWindow("Receiver");

return 0;
}

Вот вывод:

в основной функции

Запуск сценария Gstreamer

[INFO] bitstreamMode 1, chromaInterleave 0, mapType 0, tiled2LinearEnable 0

Обратите внимание, что оператор 'cout << you out of videocapture' не печатает на экране и отображает, что подключен к ресиверу без изменений. </p>

...