opencv GStreamer安装缺少使用cv2.VideoCapture所需的插件

wribegjk  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(131)

我尝试使用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。

2fjabf4q

2fjabf4q1#

您必须传递OpenCV以启动gstreamer管道的字符串与您在命令提示符中使用以查看流的字符串相同。此外,由于您希望将OpenCV用作“sink”,因此管道的最后一个元素必须是appsink。因此,您提供给cv2.VideoCapture的字符串应该类似于:

#use h265 or h264 according to your stream type
gstreamer_str = "gst-launch-1.0 rtspsrc location=rtsp://your_rtsp_src ! rtph265depay ! h265parse ! videoconvert ! appsink"

在您的函数中,使用以下命令打开视频捕获:

def test_get_feed():
    feed = cv2.VideoCapture(gstreamer_str, cv2.CAP_GSTREAMER)

如果这不起作用,请尝试从gstreamer_str中删除“gst-launch-1.0”。如果这也不起作用,请尝试从终端启动管道(使用上面写的“gst-launch-1.0”),并查看打印内容。

相关问题