在GStreamer中使用标准.so文件

时间:2013-08-01 18:51:09

标签: gstreamer

我是GStreamer编程的初学者。

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

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

2 个答案:

答案 0 :(得分:0)

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

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

您可以使用cmake

轻松实现上述目标

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

  1. 您可以尝试重命名libgstogg或
  2. 运行strace以查看二进制文件选择文件的位置
  3. 创建程序的共享库并运行ldd

答案 1 :(得分:0)

你似乎错过了一些基本概念:

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

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

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

因此,在您的特殊情况下,您希望通过libgstogg.so兑换libogg.so

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

如果您想使用libogg.so,则必须创建自己的使用libogg.so的gstreamer插件。检查documentation如何做到这一点。

在执行此操作之前,请检查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)