|
![]() |
级别: 中级 Maciej Katafiasz (ibmdw@mathrick.org), 学生, Computer Science 2006 年 8 月 07 日 本文向您介绍 GStreamer,它是一种通用的多媒体处理库,可以使得多媒体处理更加容易。 多媒体,依照其定义,表示各种各样的媒体类型。您可以各种格式存储音频、视频和元数据。然而,这也就意味着要使用许多工具来处理这些不同的内容。 GStreamer 可以为您提供帮助。通过将所有不同的工具和库隐藏到它的插件中,以及使用媒体管道 这个一般性概念,GStreamer 能以一种统一的方式表示对不同类型媒体所进行的操作。这使得您能够将精力集中于现有的媒体,而不是困惑于究竟应该使用什么样的管道。 这种统一处理方法的优点显而易见。您可以编写音乐 或视频 播放器,而不是编写 MP3 播放器或者 AVI/DivX 播放器。当您希望支持另一种格式时,无需进行深入的研究并为新的库编写代码。相反,仅需要安装这种格式的插件就可以了。就是这么简单,甚至不需要进行重新编译。所有的 GStreamer 应用程序都可以在运行的过程中采用新的格式。 GStreamer 可以解决许多问题,比如“需要存储来自不同来源具有相同格式的所有音频采样”。因为对所有的格式进行相似的处理,所以您只需要编写一个工具。这将节省时间,并使得解决方案更加健壮且更易于维护。而且,在您了解了 GStreamer 的相关概念之后,几乎可以将它应用到任何地方。如果您要让音频信息流经网络,那么只需要考虑这个网络,因为您所使用的音频 API(应用程序编程接口)和所有其他的操作都保持不变。 由于其本身的特性,GStreamer 比普通的库位于更高的层次。因此,务必理解 GStreamer 究竟是什么以及它能够完成哪些工作。 GStreamer 是一种媒体处理库。这就意味着,它为您提供了某种转换过程的抽象模型(由输入、输出和不同的阶段组成),并且允许您为满足特殊的最终结果和特殊的媒体类型而构建这种转换过程的实例。下面是这种处理过程的一些示例:
为了实现这些不同的结果,GStreamer 通过抽象的管道概念进行工作。管道 是一个有向图,媒体在这个有向图中从输入流到输出。管道由各种元素组成,而元素则是另一个核心概念。元素 是可以放入到管道中的对象,其中包装了对媒体进行的某种操作。您可以将不同的元素链接在一起,以使它们共同组成将输入转换为需要的输出的完整处理过程。通常,使用从左(上游)到右(下游)的数据流来对管道进行描述。使用 请务必注意,到目前为止,所有的内容都是完全抽象的。没有涉及到视频或音频,之所以这样做,有一个很好的理由。上面描述的模型并不局限于任何特定的媒体类型。只要您可以将其描述为输入、输出和转换过程,就都可以利用管道来对其进行操作。例如,桌面可以作为媒体来源,您可以录制对视频文件的屏幕播放。事实上,Istanbul 应用程序正是这样做的(请参见参考资料部分)。 GStreamer 的核心本身并不包含任何元素。它只提供关于管道的知识。而所有特定的内容,都由相应的插件提供。插件 是一段经过编译的代码,通常以对象文件(UNIX® 上的 .so 和Microsoft® Windows® 上的 .dll)的形式分发,可以提供一个或多个元素。在启动过程中,GStreamer 对所有已安装的插件进行查询,以获取可用于应用程序的一组元素。插件通常可以调用其他的库,以完成特定的任务(例如,MPEG-2 解码器可以使用现有的库来处理 MPEG 格式的信息),但是应用程序并不需要知道这一点。它所看到的只是一些外观和工作方式相同的元素。 有些插件以核心源包的形式分发,并且将其编译为库,甚至从概念上看,它们是一些独立的实体。其他的基本插件以基于 gst 插件包的形式分发。在大多数的 GStreamer 安装中,都包含这些基本插件。然后还有一些好的、差的和糟糕的 gst 插件包,其中,根据这些不同的插件得到的支持级别和许可条款对其进行收集。最后,还有一些由第三方供应商分发或注册专门用于特定应用程序的插件。 既然已经了解了管道,您就还需要了解如何将它映射为 GStreamer 实现。在此过程中,您还将了解到更多的术语。
正如我所提到的,元素是处理过程的基本单元,由
这些单元所具有的相应功能称为能力。这些功能表示什么类型的数据可以流经该单元。例如,如果您检查一个 清单 1. vorbisdec 元素信息中的代码段
您可以看到,其中有两种单元模板:一种用于源 ( 要使管道正常工作,这些模板是至关重要的。当您试图将两个元素链接到一起以组成一个管道时,GStreamer 会查看它们的单元模板是否兼容。这个过程称为协商。在协商过程中,这些元素会尝试发现它们之间共同支持的最佳格式。如果不存在这样的格式,那么链接将会失败。否则,它们将会达成协议使用一种通用格式。这种格式不再是模板,而称为固定的能力,这表示所有的值都具有实际意义并且是明确的。然后,可以将数据从一个元素传递到另一个元素。 现在,您已经了解了开始工作前所需要的内容。为了完成具体的工作,我将介绍 GStreamer 中如“瑞士军刀”般锐利的工具,
清单 2. gst-launch 行的示例
清单 2 是一种最简单的音频播放器。现在,我正使用它听 concept.mp3。表 1 解释了如何从左到右阅读该命令行。 表 1. 清单 2 中介绍的语法的元素描述
当我按下 Enter 时,它会显示一些状态信息,直到管道到达 正如您所看到的,GStreamer 为您节省了大量的 工作。您甚至无需了解尝试解码的媒体类型。请记住,正如 Shell 无法取代 C 程序,
本文只是简单地介绍了您能够使用 GStreamer 进行哪些工作。很显然,使用简单的 Shell 命令创建音频播放器非常不错。然而,这只是一个非常简单的播放器,没有任何用户界面和控件。要添加这些项目和更多的内容,您需要使用一些代码。即便如此, GStreamer API 仍然很简单并且经过了仔细的考虑。如果您不喜欢 C,可以从其他的绑定中进行选择,包括 Python 语言绑定的谨慎维护子集。 请阅读 另外,请加入该邮件列表并顺便访问 IRC 频道( 学习
获得产品和技术
讨论
|
转载自:http://www-128.ibm.com/developerworks/cn/aix/library/au-gstreamer.html