带有 GigE 相机的 gstreamer 管道

问题描述 投票:0回答:1

我有一个 Imperx GigE Vision 相机,我正在尝试创建一个简单的管道来侦听其 UDP 端口并显示视频流,但图像无法正确显示。我验证了图像在 Imperx 实用程序、Imperx 示例 python 脚本中以及使用 Aravis Viewer 中正确传输。

我尝试了无数种不同的上限和元素、像素格式、缓冲区大小等组合,但最简单的我的管道如下所示:

gst-launch-1.0 -e -v udpsrc port=62000 ! "video/x-raw,format=BGR,width=2064,height=1544,framerate=10/1" ! queue ! rawvideoparse ! videoconvert ! ximagesink

结果是这种变化的一些变化——倾斜和重复。似乎 hsync 或 vsync 可能存在一些问题,但在 gstreamer 文档中没有找到太多相关信息。 Image Result

注意:我真的不认为该相机正在使用 RTP - 手册中没有提到它,并且我尝试使用 rtp 相关元素运行管道都失败了,并出现“不是有效的 RTP 有效负载”或其他错误.

我还下载了 Aravis 插件并使用了它 - 这实际上似乎有效(!)...但只有灰色。该管道看起来像这样。

gst-launch-1.0 -e -v aravissrc ! videoconvert ! queue ! xvimagesink
(如果可能的话,我宁愿不必使用这个插件)

我真的很感激任何建议或调试技巧!

更新

aravis 管道的详细输出:

/GstPipeline:pipeline0/GstAravis:aravis0.GstPad:src: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, framerate=(fraction)10/1
    /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, width=(int)2064, height=(int)1544, framerate=(fraction)10/1, format=(string)YV12
    /GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw, width=(int)2064, height=(int)1544, framerate=(fraction)10/1, format=(string)YV12
    /GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-raw, width=(int)2064, height=(int)1544, framerate=(fraction)10/1, format=(string)YV12
    /GstPipeline:pipeline0/GstXvImageSink:xvimagesink0.GstPad:sink: caps = video/x-raw, width=(int)2064, height=(int)1544, framerate=(fraction)10/1, format=(string)YV12
    /GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, framerate=(fraction)10/1

这是我在没有 aravis 插件的情况下的尝试

gst-launch-1.0 -e -v udpsrc port=62000 ! rawvideoparse width=2064 height=1544 framerate=10/1 format=25 ! queue !  "video/x-raw, format=(string)GRAY8" ! videoconvert !  ximagesink

但我仍然得到一个wonky image

该命令的详细输出似乎表明它转换为 BGRx (这可能是一个问题?),我不知道如何让它停止(注意

videoconvert
src 和
ximagesink

的行)
/GstPipeline:pipeline0/GstRawVideoParse:rawvideoparse0.GstPad:src: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:sink: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
/GstPipeline:pipeline0/GstQueue:queue0.GstPad:src: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:src: caps = video/x-raw, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1, format=(string)BGRx
/GstPipeline:pipeline0/GstXImageSink:ximagesink0.GstPad:sink: caps = video/x-raw, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1, format=(string)BGRx
/GstPipeline:pipeline0/GstVideoConvert:videoconvert0.GstPad:sink: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-raw, format=(string)GRAY8, width=(int)2064, height=(int)1544, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)10/1
linux video-streaming gstreamer video-processing
1个回答
0
投票

您对所设置的上限有 100% 的把握吗?从你的图片来看,相机确实正在发送灰度,而你试图将其解释为 BGR,因此每行重复 3 次。

  • 使用 -v 运行 aravis 管道并仔细检查收到的分辨率。
  • 先启动接收管道,然后启动相机。如果您错过像素或开始接收中帧,您可能会得到类似这样的伪像。
  • 尝试接收灰度并查看是否获得正确的图像。

最后,如果您使用 Basler 相机,您可能会对这些插件感兴趣:

https://github.com/basler/gst-plugin-pylon

© www.soinside.com 2019 - 2024. All rights reserved.