【问题标题】:How to log GStreamer messages to a file如何将 GStreamer 消息记录到文件中
【发布时间】:2013-10-21 10:07:57
【问题描述】:

我有一个视频处理守护进程 (python),它运行多个进程,其中一些使用 GStreamer 将原始视频帧获取到我的自定义元素 (C)。一些进程“冻结”(进程is_alive() = True,但 Gstreamer 管道不做任何事情,也不调用任何 python 回调) - 通常在 2-10 天后,并且仅在生产中。我无法在我的计算机上复制它。

现在我有来自 python 日志记录(主程序)和 glib 日志记录(C 插件)的日志文件,但没有任何帮助,即使我在各处添加了更多日志消息。所以我希望 GStreamer 的消息中会有一些线索。

我在专用于视频处理的进程中运行 glib“主循环”,然后使用 multiprocessing.Queue 发送带有结果的消息,以便进一步处理到另一个进程。 这些 gst/video-processes 对 python 有点陌生——有很多来自 gstreamer 和其他 gstreamer 怪异的回调。这就是我将它们隔离在不同进程中的原因。

我在回调中有一些 python 日志记录,在 C 插件中有很多 glib 日志记录,但这显然还不够。 python 程序和 C 元素之间可能会失败。所以我真的需要看看 GStreamer 到底发生了什么。

不幸的是,在我看来,除了拦截stderr之外,没有其他方法可以调试Gstreamer。

我尝试在没有守护进程的情况下运行该程序,设置 GST_DEBUG 并将 stderr 存储到一个 gzip 文件中,但这并没有多大帮助,因为我将所有 GStreamer 消息混合在一个 HUGE 中 文件。

总结一下:

  • 我有一个守护进程(因此没有标准错误,没有标准输出)
  • 在守护进程中,我有很多子进程
  • 其中一些(实际上是 14 个)运行 GStreamer 管道
  • 我有一些神秘的失败
  • 我非常需要 GStreamer 调试输出
  • 但我需要将每个进程的 GStreamer 消息写入不同的文件,这样我就不会迷失在其中
  • 我不知道该怎么做。

按照 cmets 中的建议,我可以使用 GST_DEBUG_FILE env.variable,但这适用于 GStreamer 0.10.31。我有 0.10.30,所以我不能使用它。
或者我可以编写自定义日志处理程序,但由于它必须用 python 编写,并且 python 绑定无法访问“gst_debug_log_default”,所以这也不起作用(也许我错了)。

【问题讨论】:

    标签: python c gstreamer glib


    【解决方案1】:

    您将编写自己的日志处理程序。 这是一个similar 问题及其答案。请看看这是否有帮助。

    【讨论】:

    • 谢谢,GST_DEBUG_FILE 环境变量似乎是我正在寻找的 - 在任何 GStreamer 文档中都很难找到 - 不幸的是,我的 GStreamer 版本似乎不支持它( 0.10)。至于编写自定义处理程序 - 我必须用 python 编写它,这似乎是不可能的(gst_debug_log_default 没有 python 绑定):(
    • 文档说 GST_DEBUG_FILE 从版本 0.10.31 开始支持。我有 0.10.30。
    • 好吧,即使它没有像我希望的那样帮助我,它也是唯一可行的解​​决方案。
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多