我正在使用Windows 64位。我试过几个库。无法让pygame工作,无法在python 2.7上安装pymedia。
最终获得了pylayer的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()
出于某种原因,您必须调用pause命令才能播放音频。
当我想开始播放另一个声音时,会出现主要问题。如果我只是在另一个文件上调用loadfile它已经在播放,那么调用pause方法会暂停它而不是播放它。如果第一个文件播放完毕,则必须调用暂停才能播放。
此外,mplayer似乎在音频文件的末尾添加有线跳转...但我想如果必须的话,我可以忍受。
所以我需要一些检查当前文件是否仍在播放的方法。
该库似乎没有这方法。
有更好的方法吗?
答案 0 :(得分:1)
由于此实施的流媒体特性以及缺乏文档,这样做有点尴尬。
但是,你就是这样做的:
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)