使用gstreamer和Opencv完成rtsp流时,CV_CAP_PROP_FPS返回0

时间:2019-02-13 11:12:18

标签: c++ opencv gstreamer-1.0

我正在尝试使用opencv和gstreamer从Reolink Camera捕获rtsp流。我在代码中使用以下行成功捕获了流

VideoCapture cap("rtsp://admin:password@ip_address:rtsp_port latency=0 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! appsink0",CV_CAP_GSTREAMER);

我想从捕获的设备(Reolink相机)获得fps。

我确实尝试使用FFMPEG rtsp流。我可以使用cap.get(CV_CAP_PROP_FPS)捕获fps。我不得不从ffmpeg切换到gstreamer的原因是因为h264解码错误。

当我使用gstreamer时,没有任何解码错误,但是我无法获得流的fps。

我确实尝试过cap.get(CV_CAP_PROP_FPS),但它返回了0。我已将相机的FPS设置为15,并惊讶地看到返回的fps值为0。

我也确实调查了https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_gstreamer.cpp在这里找到的c​​ap_gstreamer.cpp,但是没有运气。

#include "video_reading_gstreamer.h"

int main(){

    //gst = "rtspsrc location=rtsp://admin:password@10.160.102.85:554 latency=0 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! appsink0"

    VideoCapture cap("rtsp://admin:password@10.160.102.85:554 latency=0 ! matroskamux ! rtph264depay ! h264parse ! omxh264dec ! videoconvert ! decodebin ! appsink0", CV_CAP_GSTREAMER);

    if (!cap.isOpened()) {
        cerr << "ERROR! Unable to open camera\n";
        return -1;
    }
while(1){

    Mat frame;
    // Capture frame-by-frame
    cap >> frame;

    cout << cap.get(CV_CAP_PROP_FPS) << "\n" ;
    // If the frame is empty, break immediately
    if (frame.empty())
    break;

    // Display the resulting frame
    resize(frame,frame,Size(1280,960));
    imshow( "Frame", frame );

    // Press  ESC on keyboard to exit
    char c=(char)waitKey(25);
    if(c==27)
    break;
}

  // When everything done, release the video capture object
  cap.release();

  // Closes all the frames
  destroyAllWindows();

  return 0;
}

它在控制台上打印0,正如我希望输出的是0以外的其他数字。

有人可以帮助我了解我做错了什么还是错过了什么。如何从gstreamer获取fps?

谢谢。

0 个答案:

没有答案