我有一个视频处理守护程序(python),它运行几个进程,其中一些使用GStreamer将原始视频帧提供给我的自定义元素(C)。一些进程“冻结”(进程is_alive() = True
,但Gstreamer管道不执行任何操作并且不调用任何python回调) - 通常在2-10天之后,并且仅在生产中。我无法在计算机上复制此内容。
现在我有来自python日志记录(主程序)和glib日志记录(C插件)的日志文件,但是没有任何帮助,即使我已经在所有地方添加了更多日志消息。所以我希望GStreamer的消息会有一些线索。
我在专用于视频处理的进程中运行glib“main loop”,然后使用multiprocessing.Queue
发送带有结果的消息,以便进一步处理到另一个进程。
这些gst / video-processes对于python来说有点陌生 - gstreamer和其他gstreamer怪物都有很多回调。这就是为什么我在不同的过程中将它们隔离开来。
我在回调中有一些python日志记录和C插件中的很多glib日志记录,但显然还不够。 python程序和C元素之间的某些东西可能会失败。所以我真的需要看看GStreamer的内容是怎么回事。
不幸的是,在我看来,除了拦截stderr
之外,没有办法调试Gstreamer。
我尝试在没有守护进程的情况下运行程序,设置GST_DEBUG
并将stderr
存储到gzip压缩文件中,但它没有多大帮助,因为我将所有GStreamer消息混合在一起巨大档案。
正如评论中所建议的那样,我可以使用GST_DEBUG_FILE
env.variable,但这可以从GStreamer 0.10.31开始。我有0.10.30所以我不能用它。
或者我可以编写自定义日志处理程序,但由于它必须用python编写而且`gst_debug_log_default'不能从python绑定中访问,这也不起作用(也许我错了)。