Я использую Pygst в проекте, и он работает нормально. Я пытаюсь перенести его на новую систему самоанализа (GI), но у меня другое поведение.
В старом пигсте у меня есть что-то вроде этого:
... # other imports
import pygst
pygst.require('0.10')
import gst
... # other imports
gobjects.threads_init()
...
def my_handler(bus, message):
# handle the message
...
player = gst.element_factory_make('playbin2', 'my_player')
bus = player.get_bus()
bus.connect('message', my_handler)
bus.add_signal_watch()
...
player.set_state(gst.STATE_PLAYING)
# start the main Glib loop
Параметр message имеет атрибут .type , который можно использовать для выборочной обработки (меня интересуют только конец потока (EOS) и ошибка). Используя новую систему у меня:
... # other imports
from gi.repository import Gst
import glib
import gobject
.... # other imports
gobject.threads_init()
loop = glib.MainLoop(None, False)
def bus_handler(bus, message):
print message
# handle the message
...
Gst.init_check(None)
player = Gst.ElementFactory.make('playbin2', 'my_player')
player.set_property('uri', 'file:///home/kenji/button.ogg')
bus = player.get_bus()
bus.connect('message', bus_handler)
bus.add_signal_watch()
player.set_state(Gst.State.PLAYING)
# start the main loop
Однако обработчик всегда получает параметр , сообщение как Нет . Я попытался отфильтровать их, но все равно ничего не получил (т.е. все сообщения Нет ).
Я прочитал много документации GStreamer (особенно по GstBus, add_signal_watch () и playbin2), но я не нашел ничего связанного с этим поведением. Я проверил файл Gst gir и увидел, что add_watch () не может быть самоанализ, так что это тупик. Основной цикл glib в этом примере просто для того, чтобы сделать вещи короче без полного примера GTK, но реальная вещь использует Gtk.main () (что дает точно такое же поведение).
Я использую GStreamer 0.10.35.0 (как сообщает Gst.version ()) в Arch Linux 64, но я протестировал такое же поведение на GStreamer 0.10.32.0 в Ubuntu 11.04 32-bit.
Есть ли альтернатива bus.connect ()? Я использую это неправильно? Я потратил довольно много часов на поиски этой ошибки, и я был бы очень признателен за понимание этого. Спасибо! =) * * Тысяча двадцать-семь