使用python播放.mp4,并检查它是否还在播放

我正在使用Windows 64位。 我已经尝试了几个库。 不能'pygame工作,不能'python安装在python 2.7。

最终得到了python的mplayer。

安装它https://pypi.python.org/pypi/mplayer.py/

我可以得到一个声音文件播放

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

出于某种原因,您必须调用暂停命令才能播放audio

当我想要开始另一个声音播放时出现主要问题。 如果我只是调用另一个文件上的loadfile它已经在播放,所以调用暂停方法将暂停它,而不是播放它。 如果第一个文件已经完成播放,则必须调用暂停播放它。

此外,mplayer似乎在audio文件末尾的有线跳跃中添加…但是如果必须,我想我可以忍受。

所以我需要一些检查当前文件是否仍在播放的方法。

该库似乎没有一个这样的方法。

有一个更好的方法吗 ?

Solutions Collecting From Web of "使用python播放.mp4,并检查它是否还在播放"

由于这种实现的流式性质以及缺少文档,这样做有点尴尬。

但是,这是你如何做到的:

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

如果你有一个这样的视频播放器类:

 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)