Je suis en train de suivre le tuto suivant : https://vimeo.com/26452876 qui explique comment utiliser Clutter pour faire le lien entre Gstreamer et Gtk en Python grâce PyGobject (tant de noms barbares en une phrase…).
Bref, le tuto est peu vieux, du coup lorsqu'il indique qu'il faut taper ClutterGst.init(0, "") Python indique qu'il ne faut qu'un argument, et d'après la doc, il s'agit (logiquement) de sys.argv. Sauf que ce changement, loin de résoudre mon problème, provoque une "Erreur de segmentation (core dumped)", chose que je ne sais absolument pas gérer.
Est-ce que quelqu'un a déjà eu ce problème avec ClutterGst ?
importgigi.require_version('Gtk','3.0')gi.require_version('Clutter','1.0')gi.require_version('GtkClutter','1.0')gi.require_version('ClutterGst','3.0')fromgi.repositoryimportGtk,Clutter,GtkClutter,ClutterGstimportos,sysUI_FILE="video-player.ui"classVideoPlayer:def__init__(self):self.builder=Gtk.Builder()self.builder.add_from_file(UI_FILE)self.builder.connect_signals(self)self.progress=self.builder.get_object('progress')self.button=self.builder.get_object('button')self.window=self.builder.get_object('window')self.window.show_all()defdestroy(self,window):Gtk.main_quit()defmain(argv):GtkClutter.init(argv)ClutterGst.init(argv)#si je commente cette ligne, plus de bug, mais plus de ClutterGst non plus :(app=VideoPlayer()Gtk.main()if__name__=='__main__':main(sys.argv)
Quand j'execute ton code je n'ai pas de segfault, mais juste un warning au moment de gi.require_version('ClutterGst', '3.0'): ValueError: Namespace ClutterGst not available for version 3.0 (il charge la version 2 apparement).
Evidement comme je n'ai pas ton fichier video-player.ui, j'ai une erreur au moment de self.builder.add_from_file(UI_FILE).
Testé avec Python 2.7 et python-gi 3.14.0-1 sur Debian 8 (jessie).
En remplaçant la ligne 5 par : gi.require_version('ClutterGst', '2.0'), ça ne provoque pas le bug ? Parce que chez moi, peu importe la version chargée, j'ai le même problème. De même, aucune différence entre Python 2.7 et 3.4. C'est vrai que j'ai oublié de préciser que je tourne sous Fedora, ce qui a peut-être son importance.
Je ne vois pas de segfault dans le paste que tu nous donnes, mais une erreur GLib.Error: g-file-error-quark: Failed to open file 'video-player.ui': No such file or directory (4). Il faut que tu vérifies que ton fichier video-player.ui est bien dans le même dossier que ton script Python, ou adapter le chemin en conséquence.
Edit: navré, j'ai regardé la mauvaise réponse.
Regarde du côté de ce post sur les forums de GNOME, <https://mail.gnome.org/archives/clutter-list/2015-March/msg00004.html>, qui préconise de charger ClutterGstavant ClutterGst. Bien que ça ne concerne pas directement Python, il se peut qu'il s'agisse d'un bug analogue.
C'était malheureusement trop beau… Si je mets ClutterGst.init avant GtkClutter.init, plus de Segfault effectivement, mais j'obtiens une fenêtre noire et qui ne répond pas (pas moyen de déclencher le signal 'destroy', il faut tuer le processus…) :
Je suis tombé sur le code suivant sur Internet, qui n'utilise pas Builder :
Et il marche sans problème (la lecture se lance sans soucis, les signaux ne sont pas bloqués, bref). Par contre si on inverse (ClutterGst.init avant Gtk.Clutter.init), on obtient une fenêtre noire (mais Gstreamer semble quand même tourner, vu que le son passe). D'où ma question, est-ce que cela pourrait être une incompatibilité entre Clutter et Gtk.Builder ?
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte