Pergunta

OK, então eu estou escrevendo um aplicativo, que toca música com as ligações pyGST.

Isso requer o uso de threads para a reprodução alça. As ligações de alças biblioteca maioria do controle da linha para mim, o que é bom (e o que eu estava procurando neles).

Agora, eu não tenho uma compreensão completa sobre este conceito, então eu estaria ansioso para algumas referências. Mas a maneira que eu entendo, é que eu tenho que informar basicamente o app que ele pode usar vários segmentos.

Juntei isso a partir dos exemplos no site gstreamer, onde eles usar esta chamada:

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

aqui , diz ao aplicativo que pode usar vários segmentos (mais ou menos), que é onde minha suposição acima veio.

Isso é o fundo. Agora veja isso. Eu coloquei essas linhas no meu código, e eles trabalham muito bem. Meu aplicativo reproduz música em vez de bater sempre que ele tenta. Mas algo não se sente bem.
Nos exemplos que eu tenho essas linhas de, eles usam GTK para toda a GUI, mas eu quero usar wxWidgets, por isso se sente errado chamar essa função gtk para fazer isso.

Existe uma wx equivalente a isso? ou é ok para usar esta, e que ainda funciona em várias plataformas?

Além disso, eu tenho que descobrir como matar todos esses tópicos ao sair (o que ele não faz agora) eu ver como eles fazem isso no exemplo usando um método GTK novamente, novamente, à procura de um wx equivalente .

PS: Eu acho que isso (ou solução) pode estar relacionada com a função wx.App.MainLoop (), mas eu sou perdido na tentativa de compreender como funciona este laço, por isso novamente, boas referências sobre este seria apreciada , mas acho que não é necessário, desde que eu tenho uma boa solução.

Foi útil?

Solução

Tente usar este em vez disso:

import gobject
gobject.threads_init()

Eu me pergunto como é que isso não está escrito em letras grandes no início de cada python gstreamer plug-in pedaço de documentação: ele só me levou várias horas para encontrá-lo

.

Um pouco mais detalhes aqui .

Outras dicas

Eu não tenho nenhuma experiência com pyGST, mas o conselho geral para a utilização de threads e wxPython é atualizar apenas o GUI do thread principal (ou seja, o segmento que inicia o MainLoop). Consulte http://wiki.wxpython.org/LongRunningTasks para obter mais informações.

Eu não tenho nenhuma experiência com os vínculos python, mas tive sucesso usando wxWidgets e GStreamer juntos no Windows. O problema é que wxWidgets executa um ciclo de eventos do Windows enquanto GStreamer usa um ciclo de eventos GLib. Se você não se preocupam com qualquer um dos eventos GStreamer, você não precisa fazer nada. No entanto, se você se importa de receber qualquer um dos eventos GStreamer, você terá que executar o seu próprio ciclo de eventos GLib (GMainLoop) em um segmento separado com um GMainContext separado. Use gst_bus_create_watch para criar uma fonte de evento GST, adicione uma chamada de retorno à fonte com g_source_set_callback, e, em seguida, anexá-lo ao contexto principal do seu ciclo de eventos GLib com g_source_attach. Você pode, então, lidar com a GST no retorno de chamada, por exemplo, de transmitir os eventos para o ciclo de eventos principal wx.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top