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

标签 python c gstreamer glib

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

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

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

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

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

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

总结一下:

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

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

最佳答案

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

关于python - 如何将 GStreamer 消息记录到文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19491597/

相关文章:

python - 如何将 scikit-learn 混淆矩阵保存为 png

PHP:如何在自定义模块/扩展中调用 echo

opencv - 使用 gstreamer 将 YUVj420p 像素格式转换为 RGB888

ffmpeg - 如何使用 Windows Media Foundation 代替 DirectShow 编辑服务?

python - Anaconda:上传到全局 channel

python - 使用 Flask 处理 css 文件中的 url

c++ - 为什么模块仍然可以访问在外部模块外部实现的方法

c - 无法在套接字客户端接收正确的数据

udp - gstreamer 的 udpsink 在发送约 1000 个数据包后停止流式传输

python - 如何捕获 ThreadPoolExecutor() 中线程死亡的情况?