我正在尝试将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()
答案 0 :(得分:3)
解决方案似乎很简单。在某些时候,程序很幸运地发出了Fatal Python error: GC object already tracked
消息,而且很明显:对gobject.threads_init()
的调用失踪了。将此调用添加到程序的开头可以解决问题。
答案 1 :(得分:1)
您可以使用gst-debug-level进一步探究问题。
让我们说你的代码在gst-test.py文件中。
像这样启动:
python gst-test.py --gst-debug-level = 3
这将让您更好地了解最新情况。尝试将值从3更改为1以降低噪音。
我的直觉是你错过了帽子。你也可能也要设置道具。
答案 2 :(得分:0)
我遇到过这个问题'已经跟踪过的GC对象'并尝试添加代码gobject.threads_init(),但它仍然没有解决问题。
以下文章中有几点建议来诊断此问题。希望有所帮助。 Python memory debugging with GDB