Python 如何将GStreamer消息记录到文件中

Python 如何将GStreamer消息记录到文件中,python,c,gstreamer,glib,Python,C,Gstreamer,Glib,我有一个视频处理守护进程(python),它运行几个进程,其中一些进程使用GStreamer将原始视频帧获取到我的自定义元素(C)。一些进程“冻结”(进程为_alive()=True,但Gstreamer管道不做任何事情,也不调用任何python回调)-通常在2-10天后,并且仅在生产中。我无法在我的计算机上复制这个 现在我有了python日志记录(主程序)和glib日志记录(C插件)的日志文件,但没有任何帮助,即使在我到处添加了更多日志记录消息之后。所以我希望GStreamer的信息中会有一些

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

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

我在专门用于视频处理的进程中运行glib“main loop”,然后使用
多处理。队列
发送带有结果的消息,以便进一步处理到另一个进程。
这些gst/视频进程对python来说有点陌生——有很多来自gstreamer和其他gstreamer怪癖的回调。这就是为什么我将它们隔离在不同的过程中

我在回调中有一些python日志记录,在C插件中有很多glib日志记录,但这显然是不够的。python程序和C元素之间可能出现故障。所以我真的需要看看GStreamer到底在想什么

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

我曾尝试在不使用daemonization的情况下运行该程序,设置
GST\u DEBUG
并将
stderr
存储到gzip文件中,但没有多大帮助,因为我将所有GStreamer消息混合在一个巨大的文件中

总而言之:
  • 我有一个守护进程(因此没有stderr,没有stdout)
  • 在守护进程中,我有许多子进程
  • 其中一些(实际上有14个)运行GStreamer管道
  • 我有一些神秘的失败
  • 我急需GStreamer调试输出
  • 但我需要将来自每个进程的GStreamer消息写入不同的文件,这样我就不会在其中迷失方向
  • 我不知道怎么做

正如评论中所建议的,我可以使用
GST\u DEBUG\u文件
env.variable,但这可以在GStreamer 0.10.31中使用。我有0.10.30,因此无法使用它。

或者我可以编写自定义日志处理程序,但由于它必须用python编写,并且“gst\u debug\u log\u default”不能从python绑定中访问,因此这也不会起作用(可能我错了)。

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

谢谢,似乎
GST\u DEBUG\u文件
环境变量正是我所寻找的-在任何GStreamer文档中都很难找到-不幸的是,我的GStreamer版本(0.10)似乎不支持它。至于编写自定义处理程序-我必须用python编写,这似乎是不可能的(没有针对
gst\u debug\u log\u default
的python绑定):(文档说明
gst\u debug\u FILE
在版本0.10.31中受支持。我有0.10.30。即使它没有像我所希望的那样帮助我,它也是唯一可行的解决方案。