【问题标题】:GStreamer plugin with GStreamermm(C++)GStreamer 插件与 GStreamermm(C++)
【发布时间】:2012-07-27 15:31:39
【问题描述】:

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

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

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

有人能让我走上正轨吗?即使是最小的例子或解释也可以。

谢谢

【问题讨论】:

标签: c++ plugins binding gstreamer


【解决方案1】:

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

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

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

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

[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 编写插件更容易,但那是 只是为了让事情变得更容易。

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多