为什么gst.Element.get_请求_pad(自滤器,'filter')'返回'None'(gstreamer | python)

2024-04-25 08:39:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉gstreamer及其开发。我尝试使用Gstreamer Python混合RTP流。客户端发送不同的视频测试源,这些流的混合应该在接收端使用RTP进行。至少有四个参与者可以这样做。在

接收器端将有一个视频测试背景已经链接到它将首先显示。当接收器接收到视频测试源时,视频测试源的混合应该发生并显示在videotestbackground上。在

这是接收端的代码“接收器.py“:http://pastebin.com/dM2LcNM2 以及

以下是客户端“发送”的代码_客户端.py“:http://pastebin.com/33edcQ40

我收到的错误信息如下:

ankit@fh:~/$ ./receiver4.py 
Started...
Running...
new ssrc
  session 0
  ssrc 3217594798
3217594798
filter:  /GstPipeline:server/GstCapsFilter:filter (__main__.GstCapsFilter) || Type:: <class '__main__.__main__.GstCapsFilter'>
srcpad1:  /GstPipeline:server/GstUDPSrc:udpsrc0.GstPad:src (gst.Pad)  || Type:::  <type 'gst.Pad'>
sinkpad1:  None
Traceback (most recent call last):

  File "./receiver4.py", line 132, in on_new_ssrc
    lres = gst.Pad.link(srcpad1, sinkpad1)
TypeError: GstPad.link() argument 1 must be gst.Pad, not None

我不明白为什么我收到“sinkpad1”的请求时“没有”。文件中指出,updsrc下沉垫是“应要求”提供的。在

注:请参考代码以引用我用于获取“sinkpad1”的语法和逻辑

我不能让它运行。我费了很大劲才找到解决办法。请有人帮我找出逻辑错误。提前谢谢。在


Tags: 代码pyhttp客户端视频main接收器pad
1条回答
网友
1楼 · 发布于 2024-04-25 08:39:13

这是我最终找到的解决办法。:)

我忘了记住我必须使用“rtpbin”,我从客户那里收到它。'gstrtpbin'($gst-inspect gstrtpbin)的Pad属性如下。在

Pad Templates:
  SINK template: 'recv_rtp_sink_%d'
    Availability: On request
      Has request_new_pad() function: gst_rtp_bin_request_new_pad
    Capabilities:
      application/x-rtp

  SINK template: 'recv_rtcp_sink_%d'
    Availability: On request
      Has request_new_pad() function: gst_rtp_bin_request_new_pad
    Capabilities:
      application/x-rtcp

  SINK template: 'send_rtp_sink_%d'
    Availability: On request
      Has request_new_pad() function: gst_rtp_bin_request_new_pad
    Capabilities:
      application/x-rtp

  SRC template: 'recv_rtp_src_%d_%d_%d'
    Availability: Sometimes
    Capabilities:
      application/x-rtp

  SRC template: 'send_rtcp_src_%d'
    Availability: On request
      Has request_new_pad() function: gst_rtp_bin_request_new_pad
    Capabilities:
      application/x-rtcp

  SRC template: 'send_rtp_src_%d'
    Availability: Sometimes
    Capabilities:
      application/x-rtp

根据上面的Pad属性,我必须使用“recv_rtp_sink_u%d”Pad,该Pad只有在请求时才可用。在

我替换/修改了源代码'接收器.py'文件:

^{pr2}$

当我继续修复它的时候,还有很多小错误。但我在这里发布的这个问题的主要目标已经实现了。所以,我决定提供答案,以防其他人像我一样陷入这个愚蠢的疏忽和逻辑问题。在

相关问题 更多 >