这可能是个愚蠢的问题。如何在一个进程中多次加载gstreamer元素?当创建Gstreamer元素时,如果已经创建并存在于内存中,它们是否共享?在我的例子中,一个进程创建多个线程,对于我在gstreamer元素之后创建的每个线程,链接和设置管道到PLAYING状态,filesrc-> Q-> filesink,这是有效的。但是当我在Q-> filesink之间添加gstreamer元素(新编写用于处理gst缓冲区数据)时,所有线程都停止工作,可能是什么问题?我怎么调试?请提供意见。提前致谢。 -opensid
答案 0 :(得分:1)
元素在共享库中,因此代码只在内存中存在一次。但是每个实例都会为自己的状态占用一些内存。在执行多线程的东西时,你应该从主线程中调用gst_init()一次。由于gstreamer已经为数据处理创建了新线程,因此可以从一个主线程创建所有gstreamer管道。您可以并行运行多个管道。
答案 1 :(得分:0)
我同意ensonic的答案,因为它适用于存储在klass中的数据。但它似乎并不适用于gbuffers。我正在研究基于basetransform的IEEE1278音频变换版本。在一个版本中,存在基于可设置属性允许UDP分组的过滤器插件和用于双向变换的插件,IEEE1278< - >。 mulaw取决于垫设置的内容。
对于一个简单的测试,我尝试了一个循环:
无论我对dissignalausio_transform中的gbuffer数据或元数据做了什么,输出音频都有很多强烈的点击噪音。 mulawdec中的gprints表明我的变换都没有到达mulawdec。我使用UDP环回将环路分成两个启动管道,噪声消失了。不知怎的,第一个dissignalaudio实例的gbuffer覆盖了第二个实例。
获得的经验:
有一个原因是没有双向转换的例子,所有转换都有单独的编码和解码插件。