CV_CAP_PROP_FPS возвращает 0, когда поток rtsp сделан с использованием gstreamer и Opencv - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь перехватить поток rtsp с камеры Reolink, используя opencv и gstreamer.Я успешно захватил поток, используя следующую строку в моем коде

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

Я хочу получить fps с захваченного устройства (Reolink Camera).

Я попытался использовать поток RTSP с помощью FFMPEG.Я могу захватить fps, используя cap.get(CV_CAP_PROP_FPS).Причина, по которой мне пришлось переключиться на gstreamer с ffmpeg, заключается в ошибке декодирования h264.

Я не получаю никакой ошибки декодирования при использовании gstreamer, но я не могу получить fps потока.

Я попробовал cap.get(CV_CAP_PROP_FPS), и он возвращает 0.Я установил FPS камеры на 15 и удивился, увидев, что возвращаемое значение fps равно 0.

Я также заглянул в cap_gstreamer.cpp, найденный здесь https://github.com/opencv/opencv/blob/master/modules/videoio/src/cap_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.

Может кто-нибудь помочь мне понять, если я делаю что-то неправильно или отсутствуетчто-то.Как мне получить fps от gstreamer?

Спасибо.

...