构建 Gstreamer 编辑服务失败

2024-03-31

I run ./autogen.sh在克隆的存储库中,它无法显示以下内容:

configure: No package 'gstreamer-plugins-base-1.0' found
configure: error: no gstreamer-plugins-base-1.0 >= 1.14.1 (GStreamer Base Plugins) found
  configure failed

我的 Ubuntu 上安装了 gstreamer(基本的、好的、坏的和丑陋的)。构建脚本查找的包名称是gstreamer-plugins-base-1.0系统包的名称是gstreamer1.0-plugins-base.

深入研究 autoconf 设置,我发现了以下内容:

if test -z $GSTPB_PLUGINS_DIR; then
  GSTPB_PLUGINS_DIR=`$PKG_CONFIG --variable=pluginsdir gstreamer-plugins-base-[$1]`
  if test -z $GSTPB_PLUGINS_DIR; then
    AC_MSG_ERROR(
      [no pluginsdir set in GStreamer Base Plugins pkg-config file])
  fi
fi

难道不应该吗gstreamer[$1]-plugins-base?我在这里错过了什么吗?

Update:

通过安装修复了上述问题libgstreamer1.0-dev and libgstreamer-plugins-base1.0-dev开发包

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

如果默认情况下未安装 GIntrospection,请运行以下命令

sudo apt-get build-dep gstreamer1.0

./autogen.sh将完成并且make && sudo make install也会运行良好。

当前状态:示例不构建稳定的二进制文件。运行 c 示例 segfault 和 python 示例,simple.py, 抱怨失踪GES在命名空间中。

Traceback (most recent call last):
  File "simple.py", line 26, in <module>
    gi.require_version('GES', '1.0')
  File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 130, in require_version
    raise ValueError('Namespace %s not available' % namespace)
ValueError: Namespace GES not available

仅供参考:Simple.py 看起来像这样

import gi

gi.require_version('Gst', '1.0')
gi.require_version('GES', '1.0')

from gi.repository import Gst, GES, GLib  # noqa


class Simple:
    def __init__(self, uri):
        timeline = GES.Timeline.new_audio_video()
        self.project = timeline.get_asset()

        self.project.connect("asset-added", self._asset_added_cb)
        self.project.connect("error-loading-asset", self._error_loading_asset_cb)
        self.project.create_asset(uri, GES.UriClip)
        self.layer = timeline.append_layer()
        self._create_pipeline(timeline)
        self.loop = GLib.MainLoop()

    def _create_pipeline(self, timeline):
        self.pipeline = GES.Pipeline()
        self.pipeline.set_timeline(timeline)
        bus = self.pipeline.get_bus()
        bus.add_signal_watch()
        bus.connect("message", self.bus_message_cb)

    def bus_message_cb(self, unused_bus, message):
        if message.type == Gst.MessageType.EOS:
            print("eos")
            self.loop.quit()
        elif message.type == Gst.MessageType.ERROR:
            error = message.parse_error()
            print("error %s" % error[1])
            self.loop.quit()

    def start(self):
        self.loop.run()

    def _asset_added_cb(self, project, asset):
        self.layer.add_asset(asset, 0, 0, Gst.SECOND * 5, GES.TrackType.UNKNOWN)
        self.pipeline.set_state(Gst.State.PLAYING)

    def _error_loading_asset_cb(self, project, error, asset_id, type):
        print("Could not load asset %s: %s" % (asset_id, error))
        self.loop.quit()

if __name__ == "__main__":
    if len(os.sys.argv) != 2:
        print("You must specify a file URI")
        exit(-1)

    Gst.init(None)
    GES.init()
    simple = Simple(os.sys.argv[1])
    simple.start()

运行 C 示例 simple1.c 失败,并显示以下内容:

(simple1:15606): GLib-GObject-WARNING **: 12:42:28.910: invalid (NULL) pointer instance

(simple1:15606): GLib-GObject-CRITICAL **: 12:42:28.910: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(simple1:15606): GLib-GObject-WARNING **: 12:42:28.910: invalid (NULL) pointer instance

(simple1:15606): GLib-GObject-CRITICAL **: 12:42:28.910: g_signal_connect_data: assertion 'G_TYPE_CHECK_INSTANCE (instance)' failed

(simple1:15606): GLib-GObject-CRITICAL **: 12:42:28.910: g_object_set: assertion 'G_IS_OBJECT (object)' failed
[1]    15606 segmentation fault (core dumped)  ./simple1 ~/Downloads/out.mp4

运行gdb,

gst-editing-services/examples/c/simple1": not in executable format: File format not recognized

Update

使用 Meson 构建系统重建示例。这使得可以在 gdb 中运行 bin。得到以下内容

Program received signal SIGSEGV, Segmentation fault.
ges_track_constructed (object=<optimized out>) at ../ges/ges-track.c:506
506         componame =

表明它在 ges-track.c 处失败。相关代码如下:

  if (self->type == GES_TRACK_TYPE_VIDEO) {
    componame =
        g_strdup_printf ("video_%s", GST_OBJECT_NAME (self->priv->composition));
  } else if (self->type == GES_TRACK_TYPE_AUDIO) {
    componame = // This is where it errirs
        g_strdup_printf ("audio_%s", GST_OBJECT_NAME (self->priv->composition));
  }

一行一行地走进去。以下内容被揭晓。

0x00007ffff701c2cd in __GI__dl_catch_exception (exception=exception@entry=0x7fffffffc980,
    operate=0x7ffff54530d0 <dlsym_doit>, args=0x7fffffffc9f0) at dl-error-skeleton.c:194
    194     dl-error-skeleton.c: No such file or directory.

看起来这与 GES 内部结构有关。在内部,glib 对象没有正确创建并且全部为 NULL。为什么你有invalid (NULL) pointer instance.

我能够在我的 Mac 上运行这些示例。包不匹配似乎是这里的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

构建 Gstreamer 编辑服务失败 的相关文章

随机推荐

  • 更改 QCheckBox 文本颜色

    我在那里发现了同样的问题 如何在Qt中更改QCheckBox文本标签颜色 https stackoverflow com questions 11153945 how to change qcheckbox text label color
  • 使用 JetPack Compose 更改 Android 语言

    我正在尝试使用 jetpack compose 功能更改应用程序的区域设置 如下所示 Composable fun SetLanguage position Int val locale Locale when position 0 gt
  • 当 SelectionType = ppSelectionNone 时,如何获取 Powerpoint 中可见幻灯片的 SlideIndex

    我有一些代码需要我知道什么SlideIndex进行操作 例如 在哪里插入新幻灯片 在哪里插入 ChartObject 等 大约99 的情况下 我都能成功获得SlideIndex by Dim w as Long slide index va
  • 在 Codename One 中管理我的应用程序的演示/完整版本

    我被命令提供 2 个版本的应用程序 一个演示 轻型 有限功能 另一个完整 所有功能 我的代码中有一个布尔值 它告诉我哪个正在运行 它们都在模拟器或测试设备 iOS 和 Android 上按预期运行 现在我想分发它们 所以我读到这是可能的使用
  • barplot():每组的频率百分比

    我正在尝试制作一个分组条形图 其频率 在 y 轴上 depression meds N Y 在 x 轴上 按另一个变量分组score 低高 到目前为止我的代码 meds lt table data2 depression meds data
  • React,使用本地存储实现暗光模式

    我正在尝试使用use local storage在 React 中实现主题变换器 应用程序组件 import App css import React from react import Navbar SearchBar Header Ma
  • 如何使文本框与背景无法区分?

    我应该将哪种 css 应用到文本框 使其与背景相同 这意味着用户不会觉得他正在文本框中输入内容 我尝试提供相同的背景颜色 但它仍然没有提供我想要的确切内容 用户仍然可以感觉到它是一个文本框 你的意思是这样吗 input border 0 b
  • 在 iBooks 中打开 iPad 文档文件夹中保存的 PDF 文件?

    我已将 pdf 文件保存在 iPad 上的应用程序文档文件夹中 我希望用户在 iPad 上使用 iBooks 打开该 PDF 文件 有什么方法可以打开 iBooks 中保存在应用程序文档文件夹中的 PDF 吗 EDIT Best optio
  • jquery-如何在输入2个数字后自动插入冒号

    我想要一个接受 HH MM 小时 分钟 格式的文本框 因此 当用户输入 HH 值时 它应该自动在后面插入一个冒号 并让用户输入 MM 值 我不想为此使用任何插件 我该怎么做呢 thanks HTML
  • opencv中使用静态库代替动态库

    我在 Visual Studio 2012 中有一个项目 它使用 opencv 动态库 它编译 链接并且运行良好 我想更改项目 使其使用静态库而不是动态库 我将项目 VC 目录中的库目录从 C thirdparty opencv build
  • 您可以/应该在 Xcode 的 xcassets 中存储多少张图像?

    我正在尝试在 xcassets 中存储项目的大量图像 大约2 000 然而 它们都非常小 高度优化 每个只有 3 5kB 左右 因此总大小可能为 6 10MB 这会导致内存问题吗 这是不推荐的吗 我知道我可以让用户根据需要从服务器下载它们
  • 实体框架 LINQ to Entities 加入查询超时

    我正在执行以下 LINQ to Entities 查询 但它被卡住并且直到超时才返回响应 我在 SQL Server 上执行了相同的查询 它在 3 秒内返回 92000 var query from r in WinCtx PartsRou
  • 使用 cancan 进行基于角色的授权不起作用 Rails 4 - Ruby 2.1

    我使用 cancan 1 6 10 和 devise 3 2 2 我一直在使用本指南 https github com ryanb cancan wiki Role Based Authorization wiki many roles p
  • 在 Toastr 中显示错误和异常,或使用 MVC4 和实体框架的类似方法

    我正在尝试找到一种方法 当我的应用程序中发生异常或错误时 使用 Toastr 向用户显示错误 我遇到的问题似乎表明 使用 Toastr 在当前视图中显示的控制器或数据访问层中不可能发生异常 我想知道你们中是否有人遇到过这种情况以及您的解决方
  • 如何在 Vim 中打开文件列表中的文件?

    我在 vim 中打开了一个较长的文件列表 如下所示 dir1 file1 dir2 file2 dir2 file3 如何在同一 vim 会话中以最简单的方式通过拆分或编辑将它们一一打开 我会用 p 表示制表符 vim p cat your
  • 在android中哪里以及如何使用onKey,onkeyDown,onKeyPressed事件?

    你好 在 android 中哪里使用 onKey 和 onKeyUp Down 事件 例如我有一个文本视图 当用户按下任意键时我想在文本视图中显示该字符 在这种情况下 使用哪个事件 上面 PLEASE explain with EXAMPL
  • 在页面卸载之前显示加载 GIF

    我正在开发一个可以在计算机以及 Ipad Iphone 平板电脑和 Android 手机上运行的应用程序 我有一个要求 即当用户从一个页面移动到另一页面时显示正在加载 gif 因为这将为用户提供页面加载 卸载正在进行的信息 所以我尝试了下面
  • Angular - 服务器中更改的图像未反映在视图中

    我有一个 Angular 应用程序 它显示人们的个人资料图像 从服务器加载 并可以选择更改它 当应用程序第一次加载时 图像会正确显示 我调用 Web 服务来更改服务器上的图像 问题是 即使在更改远程服务器上的图像后 即使刷新页面 浏览器上的
  • 如何从分组数据框中的每个组中获取第 n 个元素

    我有一个大数据框 其中有一列 有一个组名称 它分组为dplyr 因此多行具有相同的组名称 为了减少数据 我想从每组的第一个元素开始提取每个第 n 个元素 有没有R way没有循环 用序列对每一行进行子集化 会出现经常丢失每组的第一行的问题
  • 构建 Gstreamer 编辑服务失败

    I run autogen sh在克隆的存储库中 它无法显示以下内容 configure No package gstreamer plugins base 1 0 found configure error no gstreamer pl