【问题标题】:Qt creator for Android + GstreamerAndroid + Gstreamer 的 Qt 创建者
【发布时间】:2017-08-12 03:10:04
【问题描述】:

我在 Linux 64 位客户端下使用 Qt Creator 和 Qt 5.9.1 for Android,我正在尝试将 Gstreamer 1.12.2 for Android 引入构建。我能够部分运行 gstreamer 代码。它将运行gst_init 并通过,但gst_parse_launch 失败而无法找到任何插件,我在运行时/调试期间总是收到相同的警告,错误指向第一个插件。下面的例子。

“videotestsrc”没有元素

我认为应该归咎于我的 *.pro 文件,但我找不到使用 gstreamer 在其 documentation 中说明的 *.mk 文件的解决方案。由于 gradle 的使用,以及我对 gradle 的不熟悉,我无法找到在哪里使用 *.mk 文件。

我的 *.pro 文件包含以下插件,但我似乎缺少将它们链接在一起的东西。

GST_ROOT = /usr/local/share/gstreamer-1.0-android/x86

INCLUDEPATH += $$GST_ROOT/include \
$$GST_ROOT/include/glib-2.0 \
$$GST_ROOT/lib/glib-2.0/include \
$$GST_ROOT/lib/gstreamer-1.0/include \
$$GST_ROOT/include/gstreamer-1.0

LIBS += -L$$GST_ROOT/lib/gstreamer-1.0/static  -lgstvideo-1.0 -lgstaudio-1.0 -lgstcoreelements \
    -lgstudp -lgstrtp -lgstx264 -lgstlibav -lgstvideoparsersbad -lgstadder -lgstapp -lgstaudiorate \
    -lgstaudioresample -lgstgio -lgstpango -lgstrawparse -lgsttypefindfunctions -lgstvideorate \
    -lgstvideoscale -lgstvolume -lgstvideofilter -lgstsoup -lgstopensles \
    -lgstvideotestsrc -lgstplayback -lgstaudiotestsrc -lgstaudioconvert -lgstvideoconvert \
    -lgstinterleave -lgstautodetect -lgstandroidmedia -lgstphotography-1.0 -lgstopengl

LIBS += -L$$GST_ROOT/lib/ -lgstreamer-1.0 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 \
    -lgstbase-1.0 -lgstrtsp-1.0 -lgstvideo-1.0 -lgnutls \
     -lintl -liconv -pthread  -lffi

注册插件的C代码示例:

GST_PLUGIN_STATIC_DECLARE(coreelements);
GST_PLUGIN_STATIC_DECLARE(videotestsrc);

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    GError *error;

    //init gstreamer
    gst_init (NULL, NULL);
    gst_init_check (NULL, NULL, &error);

    //to check in debug
    gboolean i = gst_is_initialized(); //returns 1

    GST_PLUGIN_STATIC_REGISTER(coreelements);  //fails -> cannot find gst_plugin_coreelements_register();
    GST_PLUGIN_STATIC_REGISTER(videotestsrc);  //fails -> cannot find gst_plugin_videotestsrc_register();

    ...

任何帮助都会很有用,感谢您的宝贵时间。

【问题讨论】:

  • 如果它找不到那个 GStreamer 插件,那么你就不能用你的代码来帮助它。系统上缺少该插件。切换到 Linux 控制台并运行 gst-inspect1.0 pluginName 进行验证。而如何在目标设备上安装该插件则是另一个问题。
  • 我的系统安装了 gstreamer 1.12.2,它确实正确地找到了插件(在示例中为 videotestsrc)。我的理解是,gstreamer android 构建与系统构建完全分开,如果我错了,请告诉我。
  • 如果目标控制台 (?) 显示 videotestsrc 已安装,那么我不确定出了什么问题。尝试用 !作为分隔符,然后启动一些视频测试。也许GST_PLUGIN_STATIC_REGISTER 不是那样工作的。我从来没用过。

标签: android c++ linux qt gstreamer


【解决方案1】:

您的 gstreamer 插件未添加到 Android 设备。在您刚刚链接的 Libs 中的 pro 文件中,但未添加到 android。只需为每个插件添加这个:

ANDROID_EXTRA_LIBS += \
      /path/to/plugins/android/gstreamer/libgstcoreelements.so \

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 2014-05-25
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2013-07-09
    • 1970-01-01
    相关资源
    最近更新 更多