我尝试使用OpenCV通过RTSP feed捕获视频流,但遇到了与GStreamer相关的问题。以下是相关代码:
import cv2
IP = 'XXX.XXX.X.XX'
LOGIN = 'username'
PASSWORD = 'password'
FEED_URL = f'rtsp://{LOGIN}:{PASSWORD}@{IP}:554/cam/realmonitor?channel=1&subtype=0'
def test_get_feed():
feed = cv2.VideoCapture(FEED_URL)
test_get_feed()
当我运行脚本时,我得到以下错误:
[ WARN:[email protected]] global .../cap_gstreamer.cpp (2386) handleMessage OpenCV | GStreamer warning: your GStreamer installation is missing a required plugin
[ WARN:[email protected]] global .../cap_gstreamer.cpp (2402) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module uridecodebin0 reported: No URI handler implemented for "rtsp".
[ WARN:[email protected]] global .../cap_gstreamer.cpp (1356) open OpenCV | GStreamer warning: unable to start pipeline
OpenCV: Couldn't read video stream from file "rtsp://username:password@XXX.XXX.X.XX:554/cam/realmonitor?channel=1&subtype=0"
我已经:
- 通过
brew install gstreamer
卸载并重新安装Gstreamer - 尝试安装gst-rtsp-server和gstreamer-rtsp-plugin,但在brew中找不到这两个。
- 我尝试了几个版本的opencv-python,从4.6到最新版本
这些都没有帮助。我使用的是带有macOS Ventura 13.4.1的m1 mac。
1条答案
按热度按时间2fjabf4q1#
您必须传递OpenCV以启动gstreamer管道的字符串与您在命令提示符中使用以查看流的字符串相同。此外,由于您希望将OpenCV用作“sink”,因此管道的最后一个元素必须是appsink。因此,您提供给cv2.VideoCapture的字符串应该类似于:
在您的函数中,使用以下命令打开视频捕获:
如果这不起作用,请尝试从gstreamer_str中删除“gst-launch-1.0”。如果这也不起作用,请尝试从终端启动管道(使用上面写的“gst-launch-1.0”),并查看打印内容。