首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法从OpenCV gstreamer接收Gstreamer流

无法从OpenCV gstreamer接收Gstreamer流
EN

Stack Overflow用户
提问于 2019-11-08 11:33:00
回答 4查看 3.9K关注 0票数 2

我正在开发Gazebo,它使用“Gstreamer插件”通过UDP传输摄像机视频。在Ubuntu18.04上开始了仿真。

有一些资源可以理解这个结构的后端。凉亭模拟PX4指南

他们还提到了如何创建管道:

然后,来自Gazebo的视频应该在QGroundControl中显示,就像从一个真正的摄像机中显示一样。 也可以使用Gstreamer管道查看视频。只需输入以下终端命令:

代码语言:javascript
运行
复制
gst-launch-1.0  -v udpsrc port=5600 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' \
! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false

在终端机上效果很好。我读到这些问题:

使用gstreamer和python来捕获实时流?

用python中的opencv编写Gstreamer管道

因此,我尝试使用以下行将这个管道实现到opencv中:

代码语言:javascript
运行
复制
video = cv2.VideoCapture('udpsrc port=5600 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink fps-update-interval=1000 sync=false', cv2.CAP_GSTREAMER)
    #video.set(cv2.CAP_PROP_BUFFERSIZE,3)
    # Exit if video not opened.
    if not video.isOpened():
        print("Could not open video")
        sys.exit()

    # Read first frame.
    ok, frame = video.read()
    if not ok:
        print('Cannot read video file')
        sys.exit()

但这只会带来错误:

无法打开视频

在opencv中,我尝试了不同的版本,但它们都帮不了我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-12-13 07:48:14

以下代码工作正常,没有错误:

代码语言:javascript
运行
复制
# Read video
video = cv2.VideoCapture("udpsrc port=5600 ! application/x-rtp,payload=96,encoding-name=H264 ! rtpjitterbuffer mode=1 ! rtph264depay ! h264parse ! decodebin ! videoconvert ! appsink", cv2.CAP_GSTREAMER);

我认为解码选项不是真的。

票数 2
EN

Stack Overflow用户

发布于 2019-11-11 17:07:42

目前,您的管道无法为OpenCV提供从管道中提取解码视频帧的方法。这是因为所有的帧都在autovideosink元素的末尾,它负责在屏幕上显示框架。相反,您应该使用appsink元素,它专门用于允许应用程序从管道接收视频帧。

代码语言:javascript
运行
复制
video = cv2.VideoCapture(
    'udpsrc port=5600 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264"'
    ' ! rtph264depay'
    ' ! avdec_h264'
    ' ! videoconvert'
    ' ! appsink', cv2.CAP_GSTREAMER)
票数 2
EN

Stack Overflow用户

发布于 2022-06-24 19:07:29

检查您的OpenCV是否有Gstreamer支持

代码语言:javascript
运行
复制
print(cv2.getBuildInformation())

应该有

代码语言:javascript
运行
复制
Video I/O:
    FFMPEG:                      YES
      avcodec:                   YES (58.54.100)
      avformat:                  YES (58.29.100)
      avutil:                    YES (56.31.100)
      swscale:                   YES (5.5.100)
      avresample:                YES (4.0.0)
    GStreamer:                   YES (1.16.2)
    v4l/v4l2:                    YES (linux/videodev2.h)
    Intel Media SDK:             YES (/mnt/nfs/msdk/lin-18.4.1/lib64/libmfx.so)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58765770

复制
相关文章

相似问题

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