【问题标题】:Why custom element fails to link to interleave whilst linking to filesinks works ok?为什么自定义元素无法链接到交错而链接到文件接收器工作正常?
【发布时间】:2015-01-19 15:23:17
【问题描述】:

我有自己的自定义元素,我们称之为 MyElement。 它有请求接收垫,有时还有源垫。当一个源垫 创建后,MyElement 会发出一个可以被用户截获的信号。在使用此信号注册的回调中,用户可以将新的源 pad 与其他 pad 链接。

问题是,当我尝试将其源垫直接或通过标识元素链接到文件接收器时,MyElement 工作正常。但是,当我尝试将源焊盘链接到交错元素时,管道会失败。

当我将 MyElement 的源连接到 'dump' 属性设置为 true 的标识元素时,会发生类似错误。

我的元素/管道缺少什么,导致带有交错的管道失败?

【问题讨论】:

    标签: pipeline gstreamer custom-element


    【解决方案1】:

    identity 和 filesink 的大写类型为“any”。你的护垫有盖吗?

     Pad Templates:
      SINK template: 'sink'
        Availability: Always
        Capabilities:
          ANY
    

    Interleave 有以下上限:

    Pad Templates:
      SINK template: 'sink%d'
        Availability: On request
          Has request_new_pad() function: gst_interleave_request_new_pad
        Capabilities:
          audio/x-raw-int
                       rate: [ 1, 2147483647 ]
                   channels: 1
                 endianness: { 1234, 4321 }
                      width: { 8, 16, 24, 32 }
                      depth: [ 1, 32 ]
                     signed: true
          audio/x-raw-float
                       rate: [ 1, 2147483647 ]
                   channels: 1
                 endianness: { 1234, 4321 }
                      width: { 32, 64 }
    
      SRC template: 'src'
        Availability: Always
        Capabilities:
          audio/x-raw-int
                       rate: [ 1, 2147483647 ]
                   channels: [ 1, 2147483647 ]
                 endianness: { 1234, 4321 }
                      width: { 8, 16, 24, 32 }
                      depth: [ 1, 32 ]
                     signed: true
          audio/x-raw-float
                       rate: [ 1, 2147483647 ]
                   channels: [ 1, 2147483647 ]
                 endianness: { 1234, 4321 }
                      width: { 32, 64 }
    

    如果您还没有阅读 GStreamer 的调试选项,您可能需要阅读。很多事情都可能出错。

    How do I view gstreamer debug output?

    【讨论】:

    • 我知道大写必须匹配,问题是,我已将元素中的 src 焊盘上的大写设置为完全相同的大写,就像 Interleave 的 src 大写一样。我设法通过在我的元素和交错之间放置多队列元素来以某种方式使管道工作,但是我仍然不明白为什么这是必要的。
    • 顺便说一下,感谢提供调试Gstreamer的链接,一定会研究它,目前我只熟悉GST_DEBUG使用的基础知识。
    • 如果您获得足够高的调试详细信息,您通常可以看到哪些上限未能在管道中加入。首先,我设置 GST_DEBUG=2,interleave:5 并从那里开始。
    猜你喜欢
    • 1970-01-01
    • 2013-01-02
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-25
    • 2014-12-26
    相关资源
    最近更新 更多