Frage

OK, also eine App schreibe ich, die Musik spielt mit den pyGST Bindungen.

Dies erfordert die Verwendung von Threads Wiedergabe zu handhaben. Die Bindungen Bibliothek behandelt die meisten der Fadenkontrolle für mich, was schön ist (und was ich suchte in ihnen).

Nun, ich habe nicht ein volles Verständnis auf diesem Konzept haben, so würde ich für einige Referenzen gespannt sein. Aber die Art, wie ich es verstehe, ist, ich habe im Grunde die App informieren, dass es mehrere Threads verwenden kann.

entnahm ich dies aus den Beispielen auf der gstreamer Website , wo sie Mit diesem Aufruf:

gtk.gdk.threads_init()  
gtk.main()

hier , sagt dies die App kann mehrere Threads (mehr oder weniger) verwendet werden, die, wo meine obige Annahme ist herkam.

Das ist der Hintergrund. Nun ist diese bekommen. Ich habe diese Zeilen in meinem Code platziert, und sie funktionieren gut. Meine App spielt Musik statt abstürzt, wenn es versucht. Aber etwas fühlt sich nicht richtig.
In den Beispielen, die ich habe diese Zeilen aus, sie gtk für die gesamte GUI verwenden, aber ich will wxWidgets verwenden, so fühlt es sich falsch, diese gtk-Funktion aufrufen, dies zu tun.

Gibt es einen wx entspricht das? oder ist es in Ordnung, dies zu verwenden, und es wird noch Cross-Plattform arbeiten?

Auch muß ich herausfinden, wie diese Themen alle auf Ausgang zu töten (was es nicht gerade jetzt tut) Ich sehe, wie sie es in dem Beispiel mit einem gtk Verfahren wieder tun, so wieder, für ein wx äquivalent suchen .

PS: Ich denke, das (oder die Lösung) den wx.App.MainLoop () Funktion in Beziehung gesetzt werden, aber ich bin verloren zu verstehen, bei dem Versuch, wie diese Schleife funktioniert, so wieder, gute Referenzen darüber würden geschätzt , aber ich nehme nicht notwendig, solange ich eine gute Lösung.

War es hilfreich?

Lösung

Versuchen Sie es mit dieser statt:

import gobject
gobject.threads_init()

Ich frage mich, wie kommt es nicht in Großdruck zu Beginn eines jeden Python GStreamer-Plugin Stückes Dokumentation geschrieben: es hat mir nur mehrere Stunden, um es zu finden

.

Ein bisschen mehr Details hier .

Andere Tipps

Ich habe keine Erfahrung mit pyGST, aber die allgemeinen Ratschläge für die Verwendung von Threads und wxPython ist nur auf die GUI von dem Haupt-Thread zu aktualisieren (das heißt der Thread, den die MainLoop startet). Siehe http://wiki.wxpython.org/LongRunningTasks für weitere Informationen.

Ich habe keine Erfahrung mit den Python-Bindungen, aber ich habe Erfolg wxWidgets und GStreamer zusammen auf Windows. Das Problem ist, dass wxWidgets eine Windows-Ereignisschleife läuft, während GStreamer eine GLib Ereignisschleife verwendet. Wenn Sie nicht über eine der GStreamer Ereignisse kümmern, sollten Sie nichts tun müssen. Wenn Sie jedoch Pflege eine der GStreamer Ereignisse zu erhalten, müssen Sie Ihre eigene GLib Ereignisschleife (GMainLoop) in einem separaten Thread mit einem separaten GMainContext laufen. Verwenden Sie gst_bus_create_watch, um eine GST Ereignisquelle zu erstellen, fügen Sie einen Rückruf an die Quelle mit g_source_set_callback und dann befestigen mit g_source_attach auf den Haupt Kontext Ihrer GLib Ereignisschleife. Anschließend können Sie die GST in der Callback-Griff, zum Beispiel der Ereignisse an der wx Hauptereignisschleife zu übermitteln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top