1,构建一个应用程序
在这些章节中,我们将讨论GStreamer的基本概念和最常用的对象,例如元素、pads 和缓冲区。我们将使用这些对象的可视化表示,以便我们可以可视化您稍后将学习构建的更复杂的管道。您将首先了解GStreamer API,这应该足以构建基本应用程序。在本部分的后面,您还将学习构建基本的命令行应用程序。
请注意,这部分将介绍GStreamer的低级API和概念。一旦您要构建应用程序,您可能希望使用更高级别的API。
2,初始化GStreamer
编写GStreamer应用程序时,您可以简单地包含gst/gst.h
访问库函数。除此之外,您还需要 初始化GStreamer库。
2.1,简单初始化
在使用GStreamer库之前,必须调用gst_init
从主应用程序。此调用将执行必要的初始化库以及解析特定于GStreamer的命令行选项。
一个典型的程序 将包含如下所示的初始化GStreamer的代码:
#include <stdio.h>
#include <gst/gst.h>
int
main (int argc,
char *argv[])
{
const gchar *nano_str;
guint major, minor, micro, nano;
gst_init (&argc, &argv);
gst_version (&major, &minor, µ, &nano);
if (nano == 1)
nano_str = "(CVS)";
else if (nano == 2)
nano_str = "(Prerelease)";
else
nano_str = "";
printf ("This program is linked against GStreamer %d.%d.%d %s\n",
major, minor, micro, nano_str);
return 0;
}
使用 GST_VERSION_MAJOR、GST_VERSION_MINOR 和 GST_VERSION_MICRO 宏可以获取你正在构建的 GStreamer 版本,或者使用 gst_version 函数来获取你的应用程序链接的版本。GStreamer 目前使用一种方案,即具有相同主版本和次版本号的版本在 API 和 ABI 上是兼容的。
还可以调用带有两个 NULL 参数的 gst_init 函数,在这种情况下,GStreamer 不会解析任何命令行选项。
2.2,GOption的接口
您还可以使用 GOption 表来初始化自己的参数,如下例所示:
#include <gst/gst.h>
int
main (int argc,
char *argv[])
{
gboolean silent = FALSE;
gchar *savefile = NULL;
GOptionContext *ctx;
GError *err = NULL;
GOptionEntry entries[] = {
{ "silent", 's', 0, G_OPTION_ARG_NONE, &silent,
"do not output status information", NULL },
{ "output", 'o', 0, G_OPTION_ARG_STRING, &savefile,
"save xml representation of pipeline to FILE and exit", "FILE" },
{ NULL }
};
ctx = g_option_context_new ("- Your application");
g_option_context_add_main_entries (ctx, entries, NULL);
g_option_context_add_group (ctx, gst_init_get_option_group ());
if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
g_print ("Failed to initialize: %s\n", err->message);
g_clear_error (&err);
g_option_context_free (ctx);
return 1;
}
g_option_context_free (ctx);
printf ("Run me with --help to see the Application options appended.\n");
return 0;
}
如本段所示,您可以使用 GOption 表来定义您的应用程序特定的命令行选项,并将此表与 gst_init_get_option_group 函数返回的选项组一起传递给 GLib 初始化函数。除了标准的 GStreamer 选项之外,您的应用程序选项也将被解析。
- 此示例的代码是从文档中自动提取出来的,并在GStreamer tarball 中的
tests/examples/manual
下构建。