J'ai effectivement remarqué beaucoup d'études dans votre vidéo.
Je suppose que c'est en raison de l'utilisation de blit()
au lieu de draw()
+ window.flip()
qui serait beaucoup plus efficace à la mise à jour du tampon graphique.
Il est également possible de mettre la texture de player
dans un objet pyglet.sprite.Sprite()
et la texture en elle-même sera mise à jour à chaque image, mais à un taux plus élevé.
import pyglet
from pyglet.gl import *
from threading import *
# REQUIRES: AVBin
#pyglet.options['audio'] = ('alsa', 'openal', 'silent')
key = pyglet.window.key
class main(pyglet.window.Window):
def __init__ (self):
super(main, self).__init__(800, 800, fullscreen = False)
self.x, self.y = 0, 0
self.player = pyglet.media.Player()
self.player.queue(pyglet.media.load("video.mp4"))
self.sprites = {'video' : None}
self.alive = 1
def on_draw(self):
self.render()
def on_close(self):
self.alive = 0
def on_mouse_motion(self, x, y, dx, dy):
pass
def on_mouse_release(self, x, y, button, modifiers):
pass
def on_mouse_press(self, x, y, button, modifiers):
pass
def on_mouse_drag(self, x, y, dx, dy, button, modifiers):
pass
def on_key_release(self, symbol, modifiers):
pass
def on_key_press(self, symbol, modifiers):
if symbol == 65307: # [ESC]
self.alive = 0
elif symbol == key.LCTRL:
self.player.play()
def render(self):
self.clear()
if self.player.playing:
if self.sprites['video'] is None:
texture = self.player.get_texture()
if texture:
self.sprites['video'] = pyglet.sprite.Sprite(texture)
else:
self.sprites['video'].draw()
self.flip()
def run(self):
while self.alive == 1:
self.render()
# -----------> This is key <----------
# This is what replaces pyglet.app.run()
# but is required for the GUI to not freeze
#
event = self.dispatch_events()
x = main()
x.run()
Ce doublé le taux de trame pour moi, mais je vais avoir d'autres pépins avec ma .mp4
vidéo ainsi que des problèmes de pilote sur ma machine Windows, mais ça fonctionne mieux que l'exemple de code que vous avez trouvé.
Vous rencontrez quelques problèmes lors de la vérification. La plupart des vidéos que j'ai en train de traîner finissent en noir et ne montrent rien du tout (les fichiers vidéo sont codés un peu ombragés et en essayant de les passer à travers ffmpeg me donne un tas d'erreurs). Avez-vous une vidéo que vous avez testée avec laquelle nous pouvons nous télécharger? – Torxed