我試圖通過本地網絡將來自覆盆子pi相機的視頻流式傳輸到我的PC。從raspberrry pi使用gstreamer在opencv中捕獲流
在樹莓派的一面,我使用的GStreamer使用下面的命令:
raspivid -n -t 0 -rot 270 -w 960 -h 720 -fps 30 -b 6000000 -o - | gst-launch-1.0 -e -vvvv fdsrc ! h264parse ! rtph264pay pt=96 config-interval=5 ! udpsink host=192.168.1.85 port=5000
我在PC端使用以下命令:
gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! fpsdisplaysink sync=false text-overlay=false
在這種情況下,視頻被顯示一切正常。但是,我想用C++程序捕獲OpenCV流。我試圖用使用gstreamer-1.0 32bit編譯的OpenCV 3.2來做到這一點。
當我運行下面的代碼,試圖捕捉流:
#include <opencv2/opencv.hpp>
int main(int argc, char *argv[])
{
cv::VideoCapture cap("udpsrc port=5000 ! application/x-rtp, payload=96 ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! appsink");
return 0;
}
我收到以下錯誤:
GStreamer Plugin: Embedded video playback halted; module udpsrc0 reported: Internal data stream error.
OpenCV Error: Unspecified error (GStreamer: unable to start pipeline) in cvCaptureFromCAM_GStreamer, file:\opencv\modules\videoio\src\cap_gstreamer.cpp, line 832
我能夠接收使用OpenCV的其他流,但我可以不要讓它與gstreamer一起工作。 我搜索了這個問題,但我找不到任何有用的東西,所以我會很感激一些幫助。
我認爲udpsrc可能需要cap來定義編碼類型。像'application/x-rtp,encoding-name = H264,payload = 96',而不是'application/x-rtp,payload = 96'。 –
感謝您的評論,但添加上限似乎並不重要。 – Wopke