好的,所以我正在编写一个应用程序,它使用pyGST绑定播放音乐。

这需要使用线程来处理回放。绑定库为我处理大部分线程控制,这很好(以及我在其中寻找的内容)。

现在,我还没有完全掌握这个概念,所以我渴望得到一些参考。但我理解它的方式是,我必须告诉应用程序它可以使用多个线程。

我从gstreamer网站上的示例中收集了这些信息。使用此电话:

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

根据此处,这告诉应用程序它可以使用多个线程(更多或更少),这是我上面的假设来自。

这就是背景。现在得到这个。我已将这些行放在我的代码中,并且它们工作正常。我的应用程序播放音乐而不是在尝试时崩溃。但有些事情感觉不对。
在我得到这些行的示例中,他们使用gtk作为整个GUI,但是我想使用wxWidgets,所以调用这个gtk函数来执行此操作会感觉不对。

是否有与之相当的wx?或者是否可以使用它,它是否仍可跨平台工作?

另外,我必须弄清楚如何在退出时杀死所有这些线程(现在它没有做)我看到他们如何在示例中再次使用gtk方法,所以再次,寻找一个wx等价物。

PS:我认为这个(或解决方案)可能与wx.App.MainLoop()函数有关,但我在试图理解这个循环是如何工作的时候迷失了,所以再次,对此的良好引用将不胜感激,但只要我有一个好的解决方案,我认为没有必要。

有帮助吗?

解决方案

请尝试使用此代码:

import gobject
gobject.threads_init()

我想知道在每篇python gstreamer插件文档的开头是不是用大字写的:它只花了我几个小时才能找到它。

更多细节此处

其他提示

我没有使用pyGST的经验,但是使用线程和wxPython的一般建议是仅从主线程(即启动MainLoop的线程)更新GUI。有关详细信息,请参见 http://wiki.wxpython.org/LongRunningTasks

我没有使用python绑定的经验,但我在Windows上使用wxWidgets和GStreamer成功了。问题是wxWidgets运行Windows事件循环,而GStreamer使用GLib事件循环。如果您不关心任何GStreamer事件,您不需要做任何事情。但是,如果您想接收任何GStreamer事件,则必须在具有单独GMainContext的单独线程中运行您自己的GLib事件循环(GMainLoop)。使用gst_bus_create_watch创建GST事件源,使用g_source_set_callback向源添加回调,然后使用g_source_attach将其附加到GLib事件循环的主上下文中。然后,您可以在回调中处理GST,例如,将事件转发到wx主事件循环。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top