gstreamer appsrc вызывает случайные сбои - PullRequest
1 голос
/ 21 сентября 2011

Я пытаюсь настроить 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 ]

3 голосов
/ 21 сентября 2011

Решение оказалось довольно простым. В какой-то момент программе посчастливилось выплюнуть сообщение Fatal Python error: GC object already tracked, и стало довольно понятно: пропущен вызов на gobject.threads_init(). Добавление этого вызова в начало программы исправило проблему.

1 голос
/ 21 сентября 2011

Вы можете использовать gst-debug-level для дальнейшего изучения проблемы.

Допустим, ваш код находится в файле gst-test.py.

Запустите его следующим образом:

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

Это даст вам лучшее представление о том, что происходит.Попробуйте уменьшить значение с 3 до 1. Чтобы снизить уровень шума.

У меня такое ощущение, что вам не хватает заглавных букв.Возможно, вам также придется установить реквизит.

0 голосов
/ 20 апреля 2014

Я столкнулся с этой проблемой «объект GC уже отслежен» и попытался добавить код gobject.threads_init (), но проблема все еще не устранена.

В приведенной ниже статье было несколько предложений по диагностике этой проблемы.Надеюсь, это поможет. Отладка памяти Python с помощью GDB

...