opencv - OpenCV 中的 GStreamer API : autovideosink vs appsink

标签 opencv c++14 ubuntu-16.04 gstreamer video-capture

当我在终端上运行以下 Gstreamer Receiver 命令时,它运行良好。

gst-launch-1.0 -v udpsrc port=5004 ! 'application/x-rtp,payload=96,encoding-name=H264' ! rtpjitterbuffer mode=1 ! rtph264depay ! h264parse ! decodebin ! videoconvert ! autovideosink

我需要捕获这些帧并使用 OpenCV 的 Gstreamer API 进行一些处理。我在 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 (element)' failed

VideoCapture not opened

最佳答案

尝试将末尾的 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);

关于opencv - OpenCV 中的 GStreamer API : autovideosink vs appsink,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58526948/

相关文章:

使用 OpenCV 从相机捕获灰屏

c++ - 删除面积 < n OpenCV 的边界矩形

c++ - 函数 vs lambda 作为函数参数

python - 如何在ubuntu/linux中添加人脸识别登录?

linux - 删除oracle用户而不卸载oracle ubuntu16.04

java - 无法加载opencv_java249 : findLibrary returned null - OpenCV in Android Studio

python - cv2 drawMatches 在空白屏幕上绘制?

c++ - 模拟虚方法的构造函数行为

c++ - 如何在C++中获取带有特殊字符的输入

python - 关于 IntEnum 的一个奇怪的 "ImportError"