我正在尝试使用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在这里找到的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
以外的其他数字。
有人可以帮助我了解我做错了什么还是错过了什么。如何从gstreamer获取fps?
谢谢。