Juega .mp4 usando python y comprueba si / mientras aún se está reproduciendo

Estoy usando Windows 64 bit. He probado varias bibliotecas. No se pudo hacer funcionar pygame, no se pudo hacer que pymedia se instale en Python 2.7.

Finalmente obtuve mplayer para python.

Lo instalé https://pypi.python.org/pypi/mplayer.py/

y puedo conseguir un archivo de sonido para reproducir

import mplayer p = = mplayer.Player(args=(), stdout=mplayer.PIPE, stderr=None, autospawn=True) p.loadfile('C:\mymusic.mp4') p.pause() 

Por alguna razón, debe llamar al comando de pausa para reproducir el audio.

El mayor problema surge cuando quiero comenzar a reproducir otro sonido. Si acabo de llamar a loadfile en otro archivo, ya se estará reproduciendo, por lo que llamar al método de pausa lo pausará en lugar de reproducirlo. Si el primer archivo ha terminado de reproducirse, se debe llamar a la pausa para reproducirlo.

Además, parece que mplayer agrega un salto cableado al final del archivo de audio … pero creo que puedo vivir con eso si tengo que hacerlo.

Así que necesito alguna forma de comprobar si el archivo actual todavía se está reproduciendo.

La biblioteca no parece tener un método para esto.

Hay una mejor manera de hacer esto ?

Es un poco incómodo hacer esto, debido a la naturaleza de transmisión de esta implementación y la falta de documentación.

Sin embargo, así es como lo haces:

  p = 'C:\\mymusic.mp4' v = VideoPlayback_MPlayer.FromPath(p) v.playAsync() while v.isPlaying: time.sleep(0.1) 

Donde tienes una clase de reproductor de video como esta:

 class VideoPlayback_MPlayer: def __init__(self, path): self.path = path def playAsync(self): import mplayer #pip install mplayer.py and also setup choco install mplayer myself via http://downloads.sourceforge.net/project/mplayer-win32/MPlayer%20and%20MEncoder/r37451%2Bg531b0a3/MPlayer-x86_64-r37451%2Bg531b0a3.7z?r=http%3A%2F%2Foss.netfarm.it%2Fmplayer%2F&ts=1442363467&use_mirror=tcpdiag self.isPlaying = True EOFDetectionArgs = "-msglevel global=6" self.player = mplayer.Player(args=EOFDetectionArgs.split(), stderr=None, autospawn=True) self.player.stdout.connect(self._EOFDetector) self.player.loadfile(self.path) self.player.pause() # someone says online this kicks in the audio http://stackoverflow.com/questions/16385225/play-mp4-using-python-and-check-if-while-it-is-still-playing def _EOFDetector(self, stream): if stream.startswith('EOF code:'): self.isPlaying = False @property def done(self): return not self.isPlaying def play(self): self.playAsync() while self.isPlaying: time.sleep(0.00001) @staticmethod def FromPath(path): return VideoPlayback_MPlayer(path)