2011-09-21 111 views
1

我试图设置一个GStreamer appsrc作为视频源,但即使是一个微不足道的程序根本不起作用,并产生随机崩溃或挂件到目前为止。你能帮忙发现问题吗?最小崩溃代码: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() 

回答

3

该解决方案看起来很简单。在某些时候,节目很幸运地吐出Fatal Python error: GC object already tracked消息,并且变得非常清楚:对gobject.threads_init()的呼叫丢失了。将此调用添加到程序的开头解决了问题。

1

您可以使用gst-debug-level来深入探究问题。

可以说你的代码在文件gst-test.py中。

启动这样的:

蟒蛇gst-test.py --gst调试级= 3

这会给你怎么回事更好的主意。尝试将值从3更改为1以降低噪音。

我的直觉是你错过了帽子。你也可能不得不设置道具。

0

我已经遇到了这个问题'已经跟踪的GC对象',并尝试添加代码gobject.threads_init(),但它仍然没有解决问题。

在下面的文章中有几个建议来诊断这个问题。希望有所帮助。 Python memory debugging with GDB