6

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

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

简单地将 gstreamer pwg 中的示例“翻译”为 gstreamermm 是一种死胡同。gstreamer 需要使用相当多的宏来定义类型,我看不到直接的 gstreamermm 转换。此外,我对 gstreamer 的经验很少,而且绝对没有使用 gobj 的经验(到目前为止)。

有人能把我放在正确的轨道上吗?即使是最小的例子或解释也可以。

谢谢

4

1 回答 1

3

几天前我在 gtkmm 邮件列表上问过这个问题,得到了以下答案(来自 José Alburquerque):

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

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

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

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

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

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

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

于 2012-08-02T19:25:08.710 回答