我是 gStreamer 框架和多媒体方面的新手, 我正在关注here的官方第三教程, 目标是创建并运行一个管道来使用 uridecodebin 作为源元素来传输音频,它说:
我们像往常一样创建元素。 uridecodebin 将在内部实例化所有必要的元素(源、解复用器和解码器),以将 URI 转换为原始音频和/或视频流。它完成了 playbin 一半的工作。由于它包含解复用器,因此其源代码板最初不可用,我们需要动态链接到它们。
我的问题是,为什么 demuxer 不像其他元素一样最初创建其源焊盘?
我尝试在提供的示例中进行一些更改,以了解为什么解复用器要等待一段时间才能创建源焊盘,我希望使用 gst_element_link_many 或 gst_element_link 直接链接解复用器
您发布的链接中的文档向您解释了这一点:
处理解复用器时的主要复杂性在于,它们无法产生任何信息,直到它们收到一些数据并有机会查看容器以了解里面的内容。也就是说,解复用器从没有其他元素可以链接到的源焊盘开始,因此管道必须在它们处终止。
解决方案是构建从源到解复用器的管道,并将其设置为运行(播放)。当解复用器收到足够的信息以了解容器中流的数量和类型时,它将开始创建源焊盘。现在是我们完成管道构建并将其连接到新添加的解复用器焊盘的最佳时机。