GStreamermm的GStreamer插件(C++)

vhd*_*irk 5 c++ plugins binding gstreamer

我正在尝试使用GStreamermm绑定在C++中编写gstreamer插件.现在,有一个很好的插件编写指南(http://gstreamer.freedesktop.org/data/doc/gstreamer/head/pwg/html/),并且在网络上有各种示例和模板,但对于gstreamermm,它几乎没有大量的文件.

我知道我可以使用C和C++的混合,但使用C++绑定似乎更优雅.

简单地"翻译"gstreamer pwg中的例子到gstreamermm是一种死路一条; gstreamer需要使用相当多的宏来定义类型,我无法立即看到gstreamermm的翻译.另外,我对gstreamer的经验很少,而且绝对没有gobj的经验(到目前为止).

有人能让我走上正轨吗?即使是最微小的例子或解释也会这样.

谢谢

vhd*_*irk 3

几天前我在 gtkmm 邮件列表上提出了这个问题,并得到了以下答案(来自 Jos\xc3\xa9 Alburquerque):

\n\n
\n

目前,唯一有可能(可能不存在)使用 gstreamermm 开发的插件是应用程序专用的插件。如果可能的话,这些插件将使用 Gst::Plugin::register_static()[1] 方法注册,而不是您上面描述的过程。

\n\n

[1] http://developer.gnome.org/gstreamermm/unstable/classGst_1_1Plugin.html#ac0728bb285ae1bed9298c0f9ea522ad9

\n\n

理论上,可以扩展 gstreamermm 基类之一[2] 并在 Gst::Plugin::SlotInit 插槽(回调)中调用 Gst::ElementFactory::register_element()[3] 方法,以便可以创建生成这些元素的元素工厂。然后可以使用同一 Gst::Plugin::SlotInit 插槽中的 Gst::Registry::add_feature()[4] 将该工厂添加到注册表中。

\n\n

[2] http://developer.gnome.org/gstreamermm/unstable/group__GstBaseClasses.html

\n\n

[3] Gst::ElementFactory::register_element() 方法是一个尚未实现的方法,但会包装 gst_element_register() 函数。这将是即将发布的版本的一部分。

\n\n

[4] http://developer.gnome.org/gstreamermm/unstable/classGst_1_1Registry.html#ae1f9a1ddd60ef5a7e1f8cddf14ec404f

\n\n

我还没有测试过这个,也不知道它是如何工作的(或者它是否真的会工作),但如果必须的话,我会尝试这样做。然而,我认为目前用 C 语言编写插件更容易,但这只是让事情变得更容易的问题。

\n
\n