c++ - 是否可以有时从 on-pad-added 回调外部链接 pad?

标签 c++ gstreamer

与主题中的问题相同,有时是否可以将 pad 从例如 decodebin 元素链接到其他兼容元素的 pad?

我正在尝试做这样的事情:

GstElement *decodebin = gst_element_factory_make( "decodebin", nullptr );
GstPad *pad = gst_pad_new( nullptr, GST_PAD_SRC );
gst_element_add_pad( decodebin, pad );
gst_bin_add( GST_BIN(pipeline), decodebin );

GstElement *videoconvert = gst_element_factory_make( "videoconvert", nullptr );
gst_bin_add( GST_BIN(pipeline), videoconvert );

gst_element_link( decodebin, videoconvert );

奇怪的是 gst_element_link 调用成功了,因此我认为元素链接正常。但是,当尝试运行管道时,我从 h264parse 元素(我认为它位于 decodebin 内)收到一般流错误,原因:未链接。 我已经设法通过在 on-pad-added 回调中链接这些 pad 来使管道工作,但是为每个元素创建一个新的回调函数似乎不方便,有时我需要使用 pad。

最佳答案

将发生的是您新添加到 decodebin 的 pad 链接到 videoconvert。然而,这个 pad 不知道 decodebin 并且不会提供任何数据,而 decodebin 将添加自身的 pad 将产生数据但没有链接到任何东西(因此导致未链接错误)。

您可以在 pad-added 回调外部链接到 sometimes pad,但在常见情况下,您需要在 pad-added 回调中阻止 pad,以防止它输出数据,这会导致未链接错误。然后你可以链接到那个有时垫并解锁它。参见 gst_pad_add_probe()(在 1.x 中,在 0.10 中是 gst_pad_set_blocked*())。

或者,您可以将 gst_parse_launch() 或 gst_parse_bin_from_description() 与“decodebin !videoconvert”一起使用,这将自动从 pad 添加信号进行延迟链接。

关于c++ - 是否可以有时从 on-pad-added 回调外部链接 pad?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25524642/

相关文章:

c++ - 如何使用 win32 C 向对话框添加旋转控件?

c++ - exe和dll共享同一个静态库

date - 如何在 GStreamer Video Stream 上显示日期(文本叠加)?

windows - GStreamer 在 Windows 上缺少插件

ffmpeg - RTSP 流信息中的 FPS 与实际帧速率不匹配

c++ - 错误 : no matching function for call to 'begin(int*&)' c++

c++ - MinGW 中预处理器 g++ 的奇怪行为

c++ - 构造一个 unordered_map,值为一对字符串和对象类型

c - Gstreamer gst_event_new_seek 起止位置

c++ - gstreamer 管道代码通过来自相机的实时流显示文本而不是图像?