Python, Gtk3 e Gstreamer

1

Esta não é uma combinação realmente feliz, mas funciona na maior parte do tempo. No entanto, acabei de encontrar um problema com o Gio.File. Isso sempre resultará em segmentação de tipo e segmentação do Python:

Python 2.7.3 (default, Apr 10 2012, 12:29:04) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from gi.repository import GObject, Gio
>>> import gst
>>> la = Gio.File.new_for_path("/home/dklasinc/foo")

TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases
ERROR:/build/buildd/pygobject-3.2.0/gi/_gobject/pygobject.c:929:pygobject_new_full: assertion failed: (tp != NULL)

Existe alguma maneira de contornar isso? Eu gostaria de usar o Gio para operações de cópia de arquivos para que eu possa fornecer aos usuários algum feedback.

    
por BigWhale 26.04.2012 / 15:04

2 respostas

4

Qual versão do Ubuntu você está usando? Neste ponto, você realmente não deve ser capaz de usar PyGI com qualquer uma das antigas coisas estáticas do pygobject. Se isso estava funcionando, foi praticamente por acidente. No Precise de qualquer forma, se a ordem das importações for revertida, você recebe uma exceção explicando o problema:

>>> import gst
>>> from gi.repository import GObject, Gio
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/dist-packages/gi/__init__.py", line 23, in <module>
    from ._gi import _API, Repository
ImportError: could not import gobject (error was: ImportError('When using gi.repository you must not import static modules like "gobject". Please change all occurrences of "import gobject" to "from gi.repository import GObject".',))

Como uma solução alternativa, você pode fazer com que sua interface do usuário chame um script auxiliar e, nesse script, usar apenas o material estático do gst / gobject?

Apesar de ainda ter uma vantagem muito grande, o GStreamer 1.0 suporta completamente o PyGI. Existem pacotes no Quantal e os backports estão disponíveis para o Precise. Veja meu Guia de Portabilidade do Python do GStreamer 1.0 .

    
por jderose 26.04.2012 / 15:18
1

Você não pode combinar a introspecção do Gobject e as ligações estáticas do GStreamer, causando falhas e problemas. Você também precisa usar introspecção para o GStreamer, e isso é realmente suportado apenas com as versões 0.11 / 1.0.

    
por Christian Schaller 26.04.2012 / 15:43