Pregunta

Bien, estoy escribiendo una aplicación que reproduce música con los enlaces pyGST.

Esto requiere el uso de subprocesos para manejar la reproducción. La biblioteca de enlaces se encarga de la mayoría del control de hilos, lo que es bueno (y lo que estaba buscando en ellos).

Ahora, no tengo una idea completa de este concepto, por lo que estaría ansioso por algunas referencias. Pero la forma en que lo entiendo es que básicamente debo informar a la aplicación que puede usar varios subprocesos.

Reuní esto de los ejemplos en el sitio de gstreamer, donde usa esta llamada:

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

de acuerdo con here , esto le dice a la aplicación que puede usar varios subprocesos (más o menos), que es de donde provino mi suposición anterior.

Ese es el fondo. Ahora consigue esto. He colocado esas líneas en mi código, y funcionan bien. Mi aplicación reproduce música en lugar de estrellarse cada vez que lo intenta. Pero algo no se siente bien.
En los ejemplos de los que obtuve esas líneas, usan gtk para la GUI completa, pero quiero usar wxWidgets, así que se siente mal al llamar a esta función de gtk para hacer esto.

¿Existe un wx equivalente a esto? o está bien usarlo, ¿seguirá funcionando en varias plataformas?

También, tengo que averiguar cómo eliminar todos estos hilos en la salida (lo que no hace ahora). Veo cómo lo hacen en el ejemplo usando un método gtk nuevamente, así que de nuevo, busco un wx equivalente. .

PS: Creo que esto (o la solución) puede estar relacionado con la función wx.App.MainLoop (), pero estoy perdido al tratar de entender cómo funciona este bucle, así que nuevamente, se agradecerán las buenas referencias sobre esto. , pero supongo que no es necesario mientras tenga una buena solución.

¿Fue útil?

Solución

Intenta usar esto en su lugar:

import gobject
gobject.threads_init()

Me pregunto por qué no está escrito en letra grande al comienzo de cada pieza del complemento de pyston gstreamer: solo me tomó varias horas encontrarlo.

Un poco más de detalles aquí .

Otros consejos

No tengo experiencia con pyGST, pero el consejo general para usar subprocesos y wxPython es actualizar solo la GUI desde el subproceso principal (es decir, el subproceso que inicia el MainLoop). Consulte http://wiki.wxpython.org/LongRunningTasks para obtener más información.

No tengo experiencia con los enlaces de python, pero he tenido éxito al usar wxWidgets y GStreamer juntos en Windows. El problema es que wxWidgets ejecuta un bucle de eventos de Windows mientras que GStreamer usa un bucle de eventos GLib. Si no te importa ninguno de los eventos de GStreamer, no deberías hacer nada. Sin embargo, si le interesa recibir cualquiera de los eventos de GStreamer, tendrá que ejecutar su propio bucle de eventos GLib (GMainLoop) en un hilo separado con un GMainContext separado. Use gst_bus_create_watch para crear un origen de eventos GST, agregue una devolución de llamada a la fuente con g_source_set_callback, y luego adjúntela al contexto principal de su bucle de eventos GLib con g_source_attach. Luego puede manejar el GST en la devolución de llamada, por ejemplo, para reenviar los eventos al bucle de eventos principal wx.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top