2

我正在尝试将 GStreamer appsrc 设置为视频源,但即使是一个微不足道的程序也根本不起作用,并且到目前为止会产生随机崩溃或挂起。你能帮忙找出问题吗?最小的崩溃代码:

import gst, gtk

def need_data(src, need_bytes):
    src.emit("push-buffer", gst.Buffer(" "*need_bytes))

def on_message(bus, msg):
    print "on_message", msg

pipeline = gst.parse_launch("appsrc name=src ! fakesink")

src = pipeline.get_by_name("src")
src.connect("need-data", need_data)
src.set_property("blocksize", 640*480*3)

bus = pipeline.get_bus()
bus.add_signal_watch()
bus.connect("message", on_message)

pipeline.set_state(gst.STATE_PLAYING)
gtk.main()
4

3 回答 3

4

解决方案似乎很简单。在某些时候,程序很幸运地吐出了Fatal Python error: GC object already tracked消息,而且很清楚:gobject.threads_init()缺少一个调用。将此调用添加到程序的开头解决了该问题。

于 2011-09-21T10:52:00.637 回答
1

您可以使用 gst-debug-level 进一步调查问题。

假设您的代码在文件 gst-test.py 中。

像这样启动它:

python gst-test.py --gst-debug-level=3

这将使您更好地了解正在发生的事情。尝试将值从 3 更改为 1 以降低噪音。

我的直觉是你错过了帽子。您可能还必须设置道具。

于 2011-09-21T08:34:26.310 回答
0

我遇到了这个问题 'GC object already tracked' 并尝试添加代码 gobject.threads_init() 但它仍然没有解决问题。

下面的文章中有几个建议来诊断这个问题。希望有帮助。 使用 GDB 调试 Python 内存

于 2014-04-20T05:02:07.830 回答