首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GStreamer管道+ OpenCV VideoCapture.read()不返回

GStreamer管道+ OpenCV VideoCapture.read()不返回
EN

Stack Overflow用户
提问于 2022-04-09 03:58:07
回答 1查看 1.4K关注 0票数 0

我正在尝试使用以下方法获取GStreamer + OpenCV RTSP视频捕获:

代码语言:javascript
复制
vcap = cv2.VideoCapture("""rtspsrc location=rtsp://192.168.100.60:554/stream1 latency=0 ! queue ! rtph264depay
        ! h264parse ! avdec_h264 ! videoconvert ! appsink""", cv2.CAP_GSTREAMER)        
while True:
    ret, frame = vcap.read()
    print(frame)
    cv2.imshow('VIDEO', frame)
    cv2.waitKey(1)

但是,vcap读取的帧是None

代码语言:javascript
复制
(<unknown>:79564): GLib-GObject-WARNING **: 00:27:54.660: invalid cast from 'GstQueue' to 'GstBin'

(<unknown>:79564): GStreamer-CRITICAL **: 00:27:54.660: gst_bin_iterate_elements: assertion 'GST_IS_BIN (bin)' failed

(<unknown>:79564): GStreamer-CRITICAL **: 00:27:54.660: gst_iterator_next: assertion 'it != NULL' failed

(<unknown>:79564): GStreamer-CRITICAL **: 00:27:54.660: gst_iterator_free: assertion 'it != NULL' failed
[ WARN:0@0.020] global /tmp/opencv-20220409-60041-xvxfur/opencv-4.5.5/modules/videoio/src/cap_gstreamer.cpp (1226) open OpenCV | GStreamer warning: cannot find appsink in manual pipeline
[ WARN:0@0.020] global /tmp/opencv-20220409-60041-xvxfur/opencv-4.5.5/modules/videoio/src/cap_gstreamer.cpp (862) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
None
Traceback (most recent call last):
  File "/Volumes/Data/Projects/rtmp_test/src/test.py", line 21, in <module>
    read(1)
  File "/Volumes/Data/Projects/rtmp_test/src/test.py", line 18, in read
    cv2.imshow('VIDEO', frame)
cv2.error: OpenCV(4.5.5) /tmp/opencv-20220409-60041-xvxfur/opencv-4.5.5/modules/highgui/src/window.cpp:1000: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'imshow'

流可以在VLC中很好地播放,并且gst-launch-1.0 rtspsrc location=rtsp://192.168.100.60:554/stream1 latency=0 ! queue ! rtph264depay! h264parse ! avdec_h264 ! videoconvert ! appsink提供规则的输出。有人知道可能出了什么问题吗?

更新:我注意到这个问题只发生在OSX上。它在我的Ubuntu机器上运行得很好。

EN

回答 1

Stack Overflow用户

发布于 2022-04-09 19:09:57

在追加接收器之前,您可以尝试将上限指定为视频格式BGR (或单色GRAY8 ),因为这是大多数来自OpenCV的默认格式(也可能简化引用),例如:

代码语言:javascript
复制
gst_pipeline='rtspsrc location=rtsp://192.168.100.60:554/stream1 latency=0 ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! video/x-raw,format=BGR ! appsink drop=1'
vcap = cv2.VideoCapture(gst_pipeline, cv2.CAP_GSTREAMER)

还请注意,在循环中的终端中打印每个帧可能会根据您的用例和平台防止在预期的框架下运行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71805134

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档