gstreamer appsrc导致随机崩溃

2 投票
3 回答
2160 浏览
提问于 2025-04-17 02:44

我正在尝试把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 个回答

0

我遇到了一个问题,提示是“GC对象已经被追踪”,我尝试添加代码 gobject.threads_init(),但问题还是没有解决。

下面的文章里有几个建议可以帮助诊断这个问题。希望对你有帮助。 使用GDB进行Python内存调试

1

你可以使用gst-debug-level来更深入地了解问题。

假设你的代码在文件gst-test.py里。

你可以这样启动它:

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

这样做会让你更清楚发生了什么。你也可以试着把这个值从3改成1,这样信息会少一些,更容易看懂。

我感觉你可能漏掉了一些设置。你可能还需要设置一些属性。

4

这个问题的解决方法看起来很简单。在某个时刻,程序很幸运地出现了一个错误信息:Fatal Python error: GC object already tracked,这让人很清楚地意识到:程序里缺少了一个叫gobject.threads_init()的调用。把这个调用加到程序的开头,就解决了这个问题。

撰写回答