【问题标题】:Gstreamer linking decodebin2 to autovideosinkGstreamer 将 decodebin2 链接到 autovideosink
【发布时间】:2012-08-02 21:19:59
【问题描述】:

我正在尝试将一些处理逻辑添加到一个处理本地视频文件的程序中,但是我在理解如何将以下(成功的)gst-launch 命令转换为代码(并提供它)时遇到了一些麻烦带有“填充”回调):

gst-launch filesrc location=/path/to/my/video.avi ! decodebin2 ! autovideosink

我在 gstreamer 的 basic-tutorial-3 上尝试过,使用 decodebin2 代替 audioconvert

data.source = gst_element_factory_make("filesrc", "source");
data.convert = gst_element_factory_make("decodebin2", "uridecoder");
data.sink = gst_element_factory_make("autovideosink", "autodetect");

但是,我永远无法将data.convert 链接到data.sink,如示例中所述; gst_element_link(data.convert, data.sink) 总是失败。我怀疑decodebin2 有一些特殊处理。一些 gstreamer 用户提到了using ghostpads and seperate bins,经过快速尝试,也没有成功:

data.bin = gst_bin_new("processing-bin");
gst_bin_add_many(GST_BIN(data.bin), data.decoder, data.sink, NULL);
gst_element_add_pad(data.bin, 
                    gst_ghost_pad_new("bin_sink",
                                      gst_element_get_static_pad(data.decoder,"sink")));

我对如何继续调试有点困惑。有没有人指点一下?

以下是当前代码的简要要点:(gist)

====

更新:我的回调现在正在触发,我认为这是因为我的 filesrc 位置的文件名不正确(哎呀)

现在,在遵循以下建议后,我可以确认我正在获取音频和视频上限类型,并在填充回调中检查它们。但是,在一帧填充处理后,我现在收到以下“未链接”错误:

Debugging information: gstavidemux.c(5187): gst_avi_demux_loop (): /GstPipeline:gstreamer-test/GstBin:processing-bin/GstDecodeBin2:uridecoder/GstAviDemux:avidemux0:
streaming stopped, reason not-linked

【问题讨论】:

    标签: c video gstreamer decoder


    【解决方案1】:

    如果您的文件同时包含音频和视频,则将为音频和视频键盘调用您的回调。因此,在回调中,您应该检查垫的上限,并确保您尝试仅将视频垫链接到视频接收器

    【讨论】:

    • 我的回调现在正在触发,我可以检查每个新焊盘的大写类型并相应地处理它们。但是,似乎流在一帧处理后丢失了它的接收器。我已经更新了我的问题以进一步说明。
    【解决方案2】:

    我认为我遇到的主要问题是我正在听解码器寻找新的垫子,而我本应该从视频接收器获取静态垫。我已经用我的回调函数更新了要点以说明差异。

    基本上,归结为这种变化:

    我变了

    GstPad *sink_pad = gst_element_get_static_pad(data->decoder, "sink");  
    

    到下面

    GstPad *sink_pad = gst_element_get_static_pad(data->sink, "sink");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      相关资源
      最近更新 更多