-1

我是 GStreamer 编程的初学者。

我创建了一个用于在文件中播放媒体的管道。我想libogg.so用于解码 ogg 格式文件而不是libgstogg.so.

我如何在我的管道中使用这个解码器?

4

2 回答 2

0

似乎每个人都是 gstreamer 编程的初学者 :)

您将不得不编写一个程序,可能是 C 程序并将其链接到 libogg.so 而不是 libgstogg.so

您可以使用轻松实现上述目标cmake

要确认程序选择用于链接的库,

  1. 您可以尝试重命名 libgstogg 或
  2. 运行strace以查看二进制文件选择了哪个位置
  3. 创建程序的共享库并运行ldd
于 2013-08-02T09:18:25.070 回答
0

您似乎在这里错过了一些基本概念:

  • gstreamer 是一个从元素构建媒体管道的框架

  • 元素是通过插件系统定义的。插件文件是共享对象 (.so) 文件

  • 您不能仅将任何共享对象用作插件(gstreamer 不会将其识别libc.so为插件 - 仅仅是因为libc.so不提供 gstreamer 插件)

所以在你的特殊情况下你想交换libgstogg.so.libogg.so

nowlibgstogg.so是一个共享对象,它提供ogggstreamer 插件系列。另一方面libogg.so是与 gstreamer 无关的 ogg muxer/demuxer 的实现。

如果你想使用libogg.so,你必须创建自己的 gstreamer-plugin 来使用libogg.so. 检查有关如何执行此操作的文档。

在您这样做之前,请检查libgstogg.so实际执行的操作。你会发现,它提供了一个 gstreamer 插件,用于libogg.so执行实际的多路复用/解复用。它实际上只是您正在寻找的桥梁:

$ ldd /usr/lib/x86_64-linux-gnu/gstreamer-0.10/libgstogg.so | grep ogg
libogg.so.0 => /usr/lib/x86_64-linux-gnu/libogg.so.0 (0x00007fc3f9ae7000)
于 2013-08-04T15:02:51.497 回答